ID do artigo: 129649 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 2.1

PROBLEMA: GetActiveView retorna NULL para uma janela de quadro MDI

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sintomas

A função GetActiveView() retorna o modo ativo (se houver) anexado a uma janela do quadro (CFrameWnd). Esta função retorna NULL quando chamado para uma janela de quadro principal MDI (CMDIFrameWnd).

Causa

Em um aplicativo MDI, a janela de quadro principal MDI (CMDIFrameWnd) não tem um modo de exibição associado a ele. Em vez disso, cada janela filho individual (CMDIChildWnd) possui um ou mais modos de exibição associados a ele. Portanto, uma chamada para a função GetActiveView() para uma janela de quadro principal MDI retorna NULL. A seção "Mais informações" deste artigo, fornece o layout de janelas diferentes de um aplicativo MDI.

Resolução

Para resolver o problema, localize o filho MDI ativo janela (se houver) e, em seguida, chamada de função GetActiveView() para essa janela filho. A janela de filho MDI ativa encontrada chamando a função MDIGetActive() ou GetActiveFrame(), conforme demonstrado neste código:
   CMDIFrameWnd *pFrame = (CMDIFrameWnd *)AfxGetApp()->m_pMainWnd;
   // Get the active MDI child window.
   CMDIChildWnd *pChild =
                  (CMDIChildWnd *) pFrame->GetActiveFrame();
   /* or CMDIChildWnd *pChild =
                  pFrame->MDIGetActive();
   */ 
   // Get the active view attached to the active MDI child window.
   CMyView *pView = (CMyView *) pChild->GetActiveView();
				

Mais Informações

A área cliente da janela de quadro MDI é abordada pela janela cliente conhecida como MDICLIENT, também conhecido como o espaço de trabalho. Esta janela do cliente por sua vez contém zero ou mais janelas filho, cada um deles pode exibir um modo de exibição, como neste diagrama:
                    ---------------------------
                   |      Frame Window         |  ---> CMDIFrameWnd
                   | (main application window) |
                    ---------------------------
                             |
                    --------------------
                   |   Client Window    |  ---> MDICLIENT window class
                   | (no view attached) |
                    --------------------
                             |
         -----------------------------------------------------------
         |                            |
 ---------------------      --------------------
|   Child Window 1    |    |   Child Window 2   |  ---> CMDIChildWnd
| (one or more views) |    | (one or more views |
 ---------------------      --------------------
				
como ilustrado neste diagrama, a janela de quadro MDI não tem um modo de exibição diretamente associado a ele. Os modos de exibição associados, na verdade, as janelas filho MDI.

Portanto, chamar a função GetActiveView() para uma janela de quadro principal MDI retorna NULL, indicando que não há nenhum modo de exibição associado diretamente MDICLIENT. O modo ativo em um aplicativo MDI pode ser obtido por primeiro localizar a janela de filho MDI ativa e, em seguida, localizar o modo de exibição ativo para essa janela filho conforme descrito na seção resolução deste artigo.

Referências

"Windows 3.1 de programação," Microsoft, Charles Petzold pressione, 1992.

A informação contida neste artigo aplica-se a:
  • Microsoft Foundation Class Library 4.2 nas seguintes plataformas
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Professional Edition
    • Microsoft Visual C++ 5.0 Learning Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Professional Edition
Palavras-chave: 
kbmt kbcode kbdocview kbmdi kbprb kbuidesign KB129649 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 129649  (http://support.microsoft.com/kb/129649/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.