Compartilhar 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 online. Como resultado, alguns procedimentos e tópicos podem estar desatualizados ou incorretos. Para obter as informações mais recentes, é recomendável que você 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, Documentos, Quadros e Exibições.

WinApp

Há um CWinApp objeto no sistema.

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

O único CWinApp objeto possui uma lista de modelos de documento (a CPtrList). Há um ou mais modelos de documento por aplicativo. Os 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 quadros no aplicativo. A janela de quadro principal do aplicativo deve ser armazenada CWinApp::m_pMainWnd; geralmente, você define m_pMainWnd na InitInstance implementação se não tiver deixado o AppWizard fazer isso por você. Para SDI (interface de documento único), essa é uma CFrameWnd que serve como a janela principal do quadro do aplicativo, bem como a única janela de quadro de documento. Para MDI (interface de vários documentos), esse é um MDI-Frame (classe CMDIFrameWnd) que serve como a janela principal do quadro do aplicativo que contém todos os filhos CFrameWnd. Cada janela filho é de classe CMDIChildWnd (derivada de CFrameWnd) e serve como uma das janelas de quadros de documentos potencialmente muitas.

DocTemplates

O CDocTemplate criador e gerente de documentos. Ele é proprietário dos documentos que ele cria. Se o aplicativo usar a abordagem baseada em recursos descrita abaixo, ele não precisará derivar de CDocTemplate.

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

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

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

CDocTemplate mantém uma contagem do número de documentos sem nome.

CDocument

A CDocument pertence a um CDocTemplate.

Os documentos têm uma lista de exibições abertas no momento (derivadas de CView) que estão exibindo o documento (a CPtrList).

Os documentos não criam/destroem os modos de exibição, mas são anexados uns aos outros após serem criados. Quando um documento é fechado (ou seja, por meio de Arquivo/Fechamento), todas as exibições anexadas serão fechadas. Quando a última exibição em um documento for fechada (ou seja, Janela/Fechamento), o documento será fechado.

A CDocument::AddViewinterface . RemoveView é usada para manter a lista de exibição. CDocument é um amigo de CView modo que podemos definir o CView::m_pDocument ponteiro de trás.

CFrameWnd

Um 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 área do 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 controle MDICLIENT, que, por sua vez, é o pai de todas as janelas de quadro MDI-Child. Para uma janela SDI-Frame ou uma janela de quadro MDI-Child, a área do cliente geralmente é preenchida com um CViewobjeto de janela derivado. No caso de CSplitterWnd, a área do cliente do modo de exibição é preenchida com o CSplitterWnd objeto de janela e os CViewobjetos de janela derivados (um por painel dividido) são criados como janelas filho do CSplitterWnd.

Consulte também

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