Compartilhar via


TN029: Divisão Windows

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

Estilos de divisor

A CSplitterWnd oferece suporte a dois estilos diferentes de divisão do windows.

"Divisores estáticos," janela separadora cria painéis quando ele é criado.Nunca alteram a ordem e o número de painéis.As barras divisórias são usadas para redimensionar os painéis diferentes.Você pode usar esse 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 de divisor.Esse estilo de janela separadora não usa caixas de distribuição.

Em "divisores dinâmicos," painéis adicionais são criados e destruídos como os usuário divisões e divisões un novos modos de exibição.Esse divisor começa com uma única exibição e fornece caixas de distribuição para o usuário iniciar a divisão.Janela separadora cria dinamicamente 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, usando a interface do teclado, a janela separadora cria três novos objetos de exibição para os três painéis de novos.Enquanto a divisão estiver ativa, o Windows exibirá a caixa de divisão como uma barra divisória entre os painéis.Windows destrói os objetos de exibição adicionais quando o usuário remove uma divisão, mas o original permanecerá exibir até janela separadora propriamente dito é destruído.O Microsoft Excel e Microsoft Word são exemplos de aplicativos que usam o estilo dinâmico divisor.

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 irá criar painéis para preencher as linhas e colunas.Um divisor dinâmico irá criar o primeiro painel quando o CSplitterWnd é criado.

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

  • colunas 1 linha x 2: em geral com diferentes painéis

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

  • colunas de 2 linhas x 2: 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 1 linha x 2: para dados de colunas

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

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

Exemplos de divisão

Muitos programas de exemplo MFC usam divisor windows direta ou indiretamente.O exemplo MFC geral VIEWEX ilustra vários usos de divisores estáticos, incluindo como colocar um divisor em um divisor.

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

Terminologia usada pela implementação

Aqui está uma lista de termos que são específicos ao windows divisor:

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

  • Painel:
    Uma janela específica do aplicativo que um CSplitterWnd gerencia.Um painel normalmente é um objeto que é derivado de Classe CView, mas pode ser qualquer CWnd objeto que tem a identificação da janela filho adequado.

    Para usar um CWnd-derivado de objeto, passar o RUNTIME_CLASS do objeto para o CreateView funcionar como faria se estivesse usando um CView-classe derivada.Use a classe DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE porque 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 usado antes que essas ações são executadas.

  • Barra de divisão:
    Um controle que é colocado entre linhas e colunas de painéis.Ele pode ser usado para ajustar os tamanhos 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 de painéis.Ele está localizado na parte superior das barras de rolagem vertical ou à esquerda das barras de rolagem horizontal.

  • Interseção do divisor:
    A interseção de uma barra divisória vertical e uma barra de divisão horizontal.Você pode arrastar para ajustar o tamanho de uma linha e coluna de painéis simultaneamente.

Barras de rolagem compartilhado

O CSplitterWnd classe também oferece suporte a barras de rolagem compartilhado.Esses controles de barra de rolagem são filhos de CSplitterWnd e são compartilhados com diferentes painéis no divisor.

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

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

Quando o usuário move a barra de rolagem, WM_VSCROLL mensagens serão enviadas para os dois modos.Quando o modo define a posição da barra de rolagem, a barra de rolagem compartilhado será definida.

Observe que as barras de rolagem compartilhado são mais úteis com objetos de modo semelhante.Se você misturar exibições de tipos diferentes de um divisor, pode ter escrever código especial para coordenar suas posições de rolagem.Qualquer CView-derivado classe que usa o CWnd barra de rolagem APIs delegará a barra de rolagem compartilhado se ele existir.O CScrollView implementação é um exemplo de um CView classe que oferece suporte compartilhada barras de rolagem.Classes que não são derivados de CView, classes que contam com as barras de rolagem não controle ou classes que usam implementações padrão do Windows (por exemplo, CEditView) não funciona com o recurso de barra de rolagem compartilhado do CSplitterWnd.

Tamanhos mínimos

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

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

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

Reais vs.Tamanhos ideais

O layout dos painéis na janela separadora depende do tamanho do quadro que os contém.Quando um usuário redimensiona o quadro contendo o CSplitterWnd reposiciona e redimensionar os painéis para que caibam, bem como possíveis.

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

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áficos de uma janela separadora.

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

  • virtual void OnInvertTracker(const CRect& rect);

Chamar essa função para criar um controle de barra de rolagem compartilhado.Você pode substituir para criar controles extras próximo à barra de rolagem.

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

Essas funções implementam a lógica da janela separadora dinâmica.Você pode substituir esses fornecer lógica de divisão 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 de CView

O CView classe usa os seguintes comandos de alto nível para delegar para o CSplitterWnd implementação.Como esses comandos são virtuais, o padrão CView implementação não exigirá toda a CSplitterWnd implementação a ser vinculado em.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 é possível no momento.

  • virtual void ActivateNext(BOOL bPrev = FALSE);
    Executa o comando "Avançar painel" ou "anterior".

  • virtual BOOL DoKeyboardSplit();
    Executa o teclado dividir comando, normalmente "divisão de janela".

Consulte também

Outros recursos

Notas técnicas por número

Notas técnicas por categoria