Partilhar via


Alternativas à arquitetura de exibição de documento

Os aplicativos MFC normalmente usam a arquitetura de documento/exibição para gerenciar informações, formatos de arquivo e a representação visual dos dados para os usuários. Para a maioria dos aplicativos da área de trabalho, a arquitetura de documento/exibição é uma arquitetura de aplicativo apropriada e eficiente. Essa arquitetura separa os dados da exibição e, na maioria dos casos, simplifica seu aplicativo e reduz o código redundante.

No entanto, a arquitetura de documento/exibição não é apropriada para algumas situações. Considere estes exemplos:

  • Se você estiver portando um aplicativo escrito em C para Windows, talvez queira concluir sua porta antes de adicionar suporte de documento/exibição ao seu aplicativo.

  • Se você estiver escrevendo um utilitário leve, poderá descobrir que pode fazer sem a arquitetura de documento/exibição.

  • Se o código original já combina o gerenciamento de dados com a exibição de dados, mover o código para o modelo de documento/exibição não vale a pena porque você deve separar os dois. Pode ser preferível não alterar o código.

Para criar um aplicativo que não usa a arquitetura de documento/exibição, desmarque a caixa de seleção de suporte da arquitetura de documento/exibição na etapa 1 do Assistente de Aplicativo MFC. Consulte o Assistente de Aplicativo MFC para obter detalhes.

Observação

Os aplicativos baseados em caixa de diálogo produzidos pelo Assistente de Aplicativo MFC não usam a arquitetura de documento/exibição, portanto, a caixa de seleção de suporte à arquitetura de documento/exibição será desabilitada se você selecionar o tipo de aplicativo de caixa de diálogo.

Os assistentes do Visual C++, bem como os editores de origem e de diálogo, trabalham com o aplicativo gerado da mesma forma que faria com qualquer outro aplicativo gerado pelo Assistente. O aplicativo pode dar suporte a barras de ferramentas, barras de rolagem e uma barra de status e tem uma caixa Sobre. Seu aplicativo não registrará nenhum modelo de documento e não conterá uma classe de documento.

Observe que o aplicativo gerado tem uma classe de exibição, CChildView, derivada de CWnd. O MFC cria e posiciona uma instância da classe de exibição dentro das janelas de quadro criadas pelo aplicativo. O MFC ainda impõe o uso de uma janela de exibição, pois simplifica o posicionamento e o gerenciamento do conteúdo do aplicativo. Você pode adicionar código de pintura ao membro OnPaint dessa classe. Seu código deve adicionar barras de rolagem ao modo de exibição em vez de ao quadro.

Como a arquitetura de documento/exibição fornecida pelo MFC é responsável por implementar muitos dos recursos básicos de um aplicativo, sua ausência em seu projeto significa que você é responsável por implementar muitos recursos importantes do seu aplicativo:

  • Conforme fornecido pelo Assistente de Aplicativo MFC, o menu do aplicativo contém apenas comandos Novo e Sair no menu Arquivo. (O comando novo tem suporte apenas para aplicativos MDI, não aplicativos SDI sem suporte de Documento/Exibição.) O recurso de menu gerado não dará suporte a uma lista de MRU (usada mais recentemente).

  • Você deve adicionar funções e implementações de manipulador para quaisquer comandos que seu aplicativo dará suporte, incluindo Abrir e Salvar no menu Arquivo. O MFC normalmente fornece código para dar suporte a esses recursos, mas esse suporte está fortemente associado à arquitetura de documento/exibição.

  • A barra de ferramentas do aplicativo, se você solicitou uma, será mínima.

É altamente recomendável que você use o Assistente de Aplicativo MFC para criar aplicativos sem a arquitetura de documento/exibição, pois o assistente garante uma arquitetura MFC correta. No entanto, se você precisar evitar o uso do assistente, aqui estão várias abordagens para ignorar a arquitetura de documento/exibição em seu código:

  • Trate o documento como um acréscimo não utilizado e implemente o código de gerenciamento de dados na classe de exibição, conforme sugerido acima. A sobrecarga do documento é relativamente baixa. Um objeto CDocument único incorre em uma pequena quantidade de sobrecarga por si só, além da pequena sobrecarga das classes base do CDocument, CCmdTarget e CObject. As duas últimas classes são pequenas.

    Declaradas em CDocument:

    • Dois objetos CString.

    • Três BOOLs.

    • Um ponteiro CDocTemplate.

    • Um objeto CPtrList, que contém uma lista dos modos de exibição do documento.

    Além disso, o documento requer a quantidade de tempo para criar o objeto do documento, seus objetos de exibição, uma janela de quadro e um objeto de modelo de documento.

  • Trate o documento e a exibição como acréscimos não utilizados. Coloque o código de desenho e o gerenciamento de dados na janela de quadros em vez do modo de exibição. Essa abordagem está mais próxima do modelo de programação da linguagem C.

  • Substitua as partes da estrutura MFC que criam o documento e a exibição para eliminar a criação delas. O processo de criação do documento começa com uma chamada para CWinApp::AddDocTemplate. Elimine essa chamada da função de membro InitInstance da classe do seu aplicativo e, em vez disso, crie você mesmo uma janela de quadro em InitInstance. Coloque o código de gerenciamento de dados na classe de janela de quadro. O processo de criação de documento/exibição é ilustrado em Criação de documento/exibição. Isso é mais trabalho e requer uma compreensão mais profunda da estrutura, mas libera você inteiramente da sobrecarga de documento/exibição.

O artigo MFC: Usando classes de banco de dados sem documentos e exibições fornece exemplos mais concretos de alternativas de documento/exibição no contexto de aplicativos de banco de dados.

Confira também

Arquitetura de documento/exibição