TN029: Divisor do Windows

Esta nota descreve o MFC Classe CSplitterWnd, que fornece a janela divide e gerencia o redimensionamento de outras janelas do painel.

Divisor de estilos

A CSplitterWnd oferece suporte a dois estilos diferentes de separação de janelas.

"Divisores estático" janela separadora cria os painéis quando ele é criado.O pedido e número de painéis nunca mudam.As barras divisórias são usadas para redimensionar os painéis diferentes.Você pode usar este estilo para exibir uma classe de modo diferente em cada painel.O editor de elementos gráficos do Visual C++ e o Gerenciador de arquivos do Windows são exemplos de programas que usam esse estilo divisor.Esse estilo de janela separadora não usa caixas divisor.

Em "divisores dinâmicos", sistema autônomo painéis adicionais são criadas e destruídas sistema autônomo sistema autônomo usuário divisões e sistema autônomo divisões un novos modos de exibição.Esse divisor começa com um único modo de exibição e fornece caixas de divisor para o usuário inicie a separação.Janela separadora dinamicamente cria um novo objeto de exibição quando o modo de exibição é dividido em uma direção.Esse novo objeto de exibição representa o novo painel.Se o modo de exibição é dividido em duas direções por meio da interface do teclado, janela separadora cria três novos objetos de exibição para três novos painéis.Enquanto a divisão estiver ativo, o Windows exibirá a caixa de divisor sistema autônomo uma BAR divisória entre sistema autônomo painéis.Windows destrói objetos de exibição adicional quando o usuário remove um separado, mas o original permanece exibição até que a janela separadora propriamente dito é destruído.O Microsoft Excel e Microsoft palavra são exemplos de aplicativos que usam o estilo de divisor dinâmico.

Quando você criar qualquer tipo de janela separadora, você deve especificar o número máximo de linhas e colunas que gerenciará o divisor.Um divisor estático cria painéis para preencher todas as linhas e colunas.Um divisor dinâmico irá criar apenas o primeiro painel quando o CSplitterWnd é criado.

O número máximo de painéis, que você pode especificar para divisores estático é 16 linhas por 16 colunas.As configurações recomendadas são:

  • colunas de x 2 de 1 linha: geralmente com tipos diferentes de painéis

  • linhas de 2 x 1 coluna: geralmente com tipos diferentes de painéis

  • colunas de 2 x 2 de linhas: em geral com painéis semelhantes

O número máximo de painéis que você pode especificar para divisores dinâmicos é 2 linhas por 2 colunas.As configurações recomendadas são:

  • colunas de x 2 de 1 linha: para colunas de dados

  • linhas de 2 x 1 coluna: dados textuais ou de

  • colunas de 2 x 2 de linhas: para grade ou tabela orientado a dados

Exemplos de divisor

Muitos dos programas de exemplo MFC usam janelas divisor direta ou indiretamente.O exemplo de MFC geral VIEWEX ilustra vários usos de divisores estático, inclusive como colocar um divisor em um divisor.

Você também pode usar ClassWizard para criar um novo vários interface (MDI) filho quadro de janela classe de documento que contém uma janela separadora.Para obter mais informações sobre as janelas de divisor, consulte Vários tipos de documento, exibições e quadros Windows.

Terminologia usada pelo implementação

Aqui está uma lista de termos que são específicas do divisor de janelas:

  • CSplitterWnd:
    Uma janela que fornece controles de separação de painel e barras de rolar são compartilhadas entre todos os painéis em uma linha ou coluna.Você especifica linhas e colunas com números com base em zero (o painel de primeiro linha é = 0 e coluna = 0).

  • Painel:
    Uma janela específica do aplicativo que um CSplitterWnd gerencia. Um painel geralmente é um objeto derivado do Classe CView, mas pode ser qualquer CWndID do objeto com a janela filho apropriado.

    Para usar um CWnd-derivado de objeto, passar o RUNTIME_CLASS do objeto para o CreateView funcionar sistema autônomo você faria se estivesse usando um CView-classe derivada. Sua classe deve usar DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE como a estrutura usa criação dinâmica em tempo de execução. Embora haja muitos códigos em CSplitterWnd que é específico para o CView classe, CObject::IsKindOf sempre é utilizada antes que essas ações são executadas.

  • BAR de divisão:
    Um controle é colocado entre linhas e colunas de painéis.Ele pode ser usado para ajustar o tamanho das linhas ou colunas de painéis.

  • Caixa de divisão:
    Um controle em um dinâmico CSplitterWnd que você pode usar para criar novas linhas ou colunas dos painéis. Ele está localizado na parte superior das barras de rolar vertical ou à esquerda das barras de rolar horizontal.

  • Divisor interseção:
    A interseção de uma BAR divisória vertical com uma BAR divisória horizontal.Você pode arrastar para ajustar o dimensionar de uma linha e coluna de painéis de simultaneamente.

Barras de rolar compartilhado

The CSplitterWnd classe também oferece suporte a barras de rolar compartilhado. Esses BAR de rolar controles são filhos do CSplitterWnd e são compartilhados com diferentes painéis no divisor.

Por exemplo, em uma janela de coluna 1 linha x 2, você pode especificar WS_VSCROLL ao criar o CSplitterWnd. O Windows cria um especial BAR de rolar controle que é compartilhada entre os dois painéis.

[      ][      ][^]
[pane00][pane01][|]
[      ][      ][v]

Quando o usuário move o BAR de rolar, WM_VSCROLL as mensagens serão enviadas para os dois modos de exibição. Quando um exibir conjunto s a posição da BAR de rolar, a BAR de rolar compartilhado será conjunto.

Observe que as barras de rolar compartilhado são mais úteis com objetos de modo semelhante.Se você combinar os modos de exibição de tipos diferentes de um divisor, talvez seja necessário escrever um código especial para coordenar suas posições de rolar.Any CView-derivada da classe que usa o CWnd APIs BAR de rolagem delegará para o compartilhada BAR de rolagem se ele existir. The CScrollView implementação é um exemplo de um CView classe que oferece suporte compartilhado barras de rolar. Classes derivadas não de CView, classes que dependem de controle não BAR de rolar s ou classes que usam implementações padrão do Windows (por exemplo, CEditView) não funcionará com o compartilhada BAR de rolar recurso do CSplitterWnd.

Tamanhos mínimos

Para cada linha há uma altura mínima de linha e para cada coluna, há uma largura mínima de coluna.Esse mínimo garante que um painel não seja muito pequeno para ser mostrado em detalhes completos.

Para uma janela separadora estático, a linha inicial mínimo altura e a largura da coluna é 0.Para uma janela separadora dinâmica, a linha inicial mínimo altura e a largura da coluna são definidos pelo sizeMin parâmetro das CSplitterWnd::Create função.

Você pode alterar esses tamanhos mínimos, usando o CSplitterWnd::SetRowInfo e CSplitterWnd::SetColumnInfo funções.

real vs.Tamanhos ideais

O layout dos painéis na janela separadora depende do dimensionar do quadro que os contém.Quando um usuário redimensionar a quadro que contém, o CSplitterWnd Reposiciona e redimensionar sistema autônomo painéis para que elas se encaixam, bem sistema autônomo possíveis.

O usuário poderá conjunto manualmente a linha de tamanhos de largura de altura e a coluna ou o programa pode conjunto o dimensionar ideal usando o CSplitterWnd classe. O dimensionar real pode ser menor ou maior que o ideal.O Windows irá ajustar o dimensionar real se não houver espaço suficiente para exibir o dimensionar ideal ou se houver muito espaço vazio na parte inferior da janela separadora ou direita.

Controles personalizados.

Você pode substituir muitas funções para oferecer comportamento personalizado e uma interface personalizada.Você pode substituir esse primeiro conjunto para fornecer imagens alternativas para os vários componentes gráficas de uma janela separadora.

  • virtual void OnDrawSpltter(CDC* pDC, ESplitType nType, const CRect& rect);

  • virtual void OnInvertTracker(const CRect& rect);

Você chamar esta função para criar um controle BAR de rolar compartilhado.Você pode substituir controlados por ele para criar mais próximo à BAR de rolar.

  • virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);

Essas funções implementar a lógica da janela separadora dinâmica.Você pode substituir para fornecer a lógica de divisor mais avançada.

  • virtual void DeleteView(int row, int col);

  • virtual BOOL SplitRow(int cyBefore);

  • virtual BOOL SplitColumn(int cxBefore);

  • virtual void DeleteRow(int rowDelete);

  • virtual void DeleteColumn(int colDelete);

Funcionalidade CView

The CView classe usa os seguintes comandos de alto nível para delegado a CSplitterWnd implementação. Como esses comandos são virtual, o padrão CView implementação não exigirá toda a CSplitterWnd implementação a ser vinculado no. Para aplicativos que usam CView mas não CSplitterWnd, o CSplitterWnd implementação não será vinculada com o aplicativo.

  • virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
    Verifica se ID_NEXT_PANE ou ID_PREV_PANE é atualmente possível.

  • virtual void ActivateNext(BOOL bPrev = FALSE);
    Executa o comando "Próximo painel" ou "Painel anterior".

  • virtual BOOL DoKeyboardSplit();
    Executa o teclado dividir comando, geralmente "janela dividir".

Consulte também

Outros recursos

Notas técnicas por número

Notas técnicas por categoria