Partilhar via


TN025: Criação de documento, exibição e quadro

Observação

A nota técnica a seguir não foi atualizada desde que foi incluída pela primeira vez na documentação on-line. Como resultado, alguns procedimentos e tópicos podem estar desatualizados ou incorretos. Para obter as informações mais recentes, recomenda-se que pesquise o tópico de interesse no índice de documentação online.

Esta nota descreve os problemas de criação e propriedade para WinApps, DocTemplates, Documents, Frames e Views.

WinApp [en]

Há um CWinApp objeto no sistema.

É construído estaticamente e inicializado pela implementação interna do framework de WinMain. Você deve derivar de CWinApp para fazer algo útil (exceção: as DLLs de extensão MFC não devem ter uma instância CWinApp — a inicialização é feita em vez disso em DllMain).

O objeto one CWinApp possui uma lista de modelos de documento (a CPtrList). Existe um ou mais modelos de documentos por candidatura. DocTemplates geralmente são carregados do arquivo de recurso (ou seja, uma matriz de cadeia de caracteres) em CWinApp::InitInstance.

pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);

AddDocTemplate(pTemplate);

O único CWinApp objeto possui todas as janelas de quadro no aplicativo. A janela do quadro principal do aplicativo deve ser armazenada em CWinApp::m_pMainWnd, geralmente você define m_pMainWnd na implementação se você não deixou o InitInstance AppWizard fazer isso por você. Para a interface de documento único (SDI), esta é uma CFrameWnd que funciona como a janela principal da aplicação, assim como a única janela de quadro de documento. Para MDI (interface de vários documentos), esta é uma MDI-Frame (classe CMDIFrameWnd) que serve como a janela principal do quadro da aplicação que contém todos os filhos CFrameWnd. Cada janela secundária pertence à classe CMDIChildWnd (derivada de CFrameWnd) e serve como uma das muitas janelas de moldura de documento.

Templates de Documentos

O CDocTemplate é o criador e gestor de documentos. É proprietária dos documentos que cria. Se seu aplicativo usa a abordagem baseada em recursos descrita abaixo, ele não precisará derivar de CDocTemplate.

Para um aplicativo SDI, a classe CSingleDocTemplate controla um documento aberto. Para um aplicativo MDI, a classe CMultiDocTemplate mantém uma lista (a CPtrList) de todos os documentos atualmente abertos criados a partir desse modelo. CDocTemplate::AddDocument e CDocTemplate::RemoveDocument fornecer as funções de membro virtual para adicionar ou remover um documento do modelo. CDocTemplate é um amigo de CDocument para que possamos definir o ponteiro de volta protegido CDocument::m_pDocTemplate para apontar de volta para o modelo de documento que criou o documento.

CWinApp lida com a implementação padrão OnFileOpen , que por sua vez consultará todos os modelos de documentos. A implementação inclui procurar documentos já abertos e decidir em que formato abrir novos documentos.

CDocTemplate gerencia a vinculação da interface do usuário para documentos e quadros.

CDocTemplate Mantém o registro do número de documentos anónimos.

CDocument

A CDocument é propriedade de um CDocTemplate.

Os documentos têm uma lista de modos de exibição atualmente abertos (derivados de CView) que estão exibindo o documento (a CPtrList).

Os documentos não criam/destroem as vistas, mas são anexados uns aos outros depois de criados. Quando um documento é fechado (ou seja, através de Ficheiro/Fechar), todas as vistas anexadas serão fechadas. Quando a última vista de um documento for fechada (ou seja, Janela/Fechar), o documento será fechado.

A interface CDocument::AddView, RemoveView é usada para manter a lista de exibição. CDocument é um amigo de CView, então podemos definir o ponteiro de volta CView::m_pDocument.

CFrameWnd

A CFrameWnd (também conhecido como quadro) desempenha o mesmo papel que no MFC 1.0, mas agora a CFrameWnd classe foi projetada para ser usada em muitos casos sem derivar uma nova classe. As classes CMDIFrameWnd derivadas e CMDIChildWnd também são aprimoradas, então muitos comandos padrão já estão implementados.

O CFrameWnd é responsável pela criação de janelas na zona cliente do quadro. Normalmente, há uma janela principal preenchendo a área do cliente do quadro.

Para uma janela MDI-Frame, a área do cliente é preenchida com o controlo MDICLIENT, que, por sua vez, é o progenitor de todas as janelas de moldura MDI-Child. Para uma janela SDI-Frame ou uma janela de moldura MDI-Child, a área do cliente geralmente é preenchida com um objeto de janela derivado de CView. No caso do CSplitterWnd, a área do cliente da exibição é preenchida com o CSplitterWnd objeto window e os CViewobjetos de janela derivados (um por painel dividido) são criados como janelas filhas do CSplitterWnd.

Ver também

Notas técnicas por número
Notas técnicas por categoria