Criando um aplicativo de contêiner de documento ativo
A maneira mais simples e recomendada de criar um aplicativo de contêiner de documento ativo é criar um aplicativo de contêiner MFC EXE usando o Assistente de Aplicativo MFC e depois modificar o aplicativo para dar suporte à independência de documentos ativos.
Para criar um aplicativo de contêiner de documento ativo
No menu Arquivo, clique em Projeto no submenu Novo.
No painel esquerdo, clique no tipo de projeto Visual C++.
Selecione Aplicativo MFC no painel direito.
Dê ao projeto o nome MyProj e clique em OK.
Selecione a página Suporte a documentos compostos.
Selecione a opção Contêiner ou Contêiner/Servidor Completo.
Marque a caixa de seleção Contêiner do documento ativo.
Clique em Concluir.
Quando o Assistente de Aplicativo MFC terminar de gerar o aplicativo, abra os seguintes arquivos usando Gerenciador de Soluções:
- MyProjview.cpp
Em MyProjview.cpp, faça as seguintes alterações:
Em
CMyProjView::OnPreparePrinting
, substitua a chamada da função pelo seguinte código:if (!CView::OnPreparePrinting(pInfo)) return FALSE; if (!COleDocObjectItem::OnPreparePrinting(this, pInfo)) return FALSE; return TRUE;
OnPreparePrinting
dá suporte para impressão. Esse código substituiDoPreparePrinting
, que é a preparação de impressão padrão.A independência de documentos ativos fornece um esquema de impressão aprimorado:
Primeiro, você pode chamar o documento ativo por meio de sua interface
IPrint
e instruir que ele imprima a si próprio. Isso é diferente da independência de OLE anterior, na qual o contêiner precisava renderizar uma imagem do item contido no objetoCDC
da impressora.Se isso falhar, instrua o item contido a imprimir a si mesmo por meio de sua interface
IOleCommandTarget
Se isso falhar, faça uma renderização própria do item.
As funções de membro estáticas
COleDocObjectItem::OnPrint
eCOleDocObjectItem::OnPreparePrinting
, conforme implementado no código anterior, lidam com esse esquema de impressão aprimorado.Adicione qualquer implementação própria e compile o aplicativo.