Serviços CWinApp especiais
Além de executar o loop de mensagens e dar-lhe a oportunidade de inicializar o aplicativo e limpar depois dele, o CWinApp fornece vários outros serviços.
Registro de Shell
Por padrão, o Assistente de Aplicativo MFC possibilita que o usuário abra arquivos de dados que seu aplicativo criou clicando duas vezes neles em Explorador de Arquivos ou no Gerenciador de Arquivos. Se o aplicativo for um aplicativo MDI e você especificar uma extensão para os arquivos que seu aplicativo cria, o Assistente de Aplicativo MFC adicionará chamadas às funções membro RegisterShellFileTypes e EnableShellOpen do CWinApp à InitInstance
substituição que ele grava para você.
RegisterShellFileTypes
registra os tipos de documento do aplicativo com Explorador de Arquivos ou Gerenciador de Arquivos. A função adiciona entradas ao banco de dados de registro que o Windows mantém. As entradas registram cada tipo de documento, associam uma extensão de arquivo ao tipo de arquivo, especificam uma linha de comando para abrir o aplicativo e especificam um comando DDE (troca de dados dinâmico) para abrir um documento desse tipo.
EnableShellOpen
conclui o processo permitindo que seu aplicativo receba comandos DDE do Explorador de Arquivos ou do Gerenciador de Arquivos para abrir o arquivo escolhido pelo usuário.
Esse suporte CWinApp
de registro automático elimina a necessidade de enviar um arquivo .reg com seu aplicativo ou realizar um trabalho de instalação especial.
Se você quiser inicializar o GDI+ para seu aplicativo (chamando GdiplusStartup em sua função InitInstance), será necessário suprimir o thread em segundo plano GDI+.
Você pode fazer isso definindo o membro SuppressBackgroundThread
da estrutura GdiplusStartupInput como TRUE. Ao suprimir o thread em segundo plano GDI+, as chamadas NotificationHook
e NotificationUnhook
devem ser feitas antes de entrar e sair do loop de mensagem do aplicativo. Para obter mais informações sobre essas chamadas, consulte GdiplusStartupOutput. Portanto, um bom lugar para chamar GdiplusStartup
e as funções de notificação de gancho estaria em uma substituição da função virtual CWinApp::Run, conforme mostrado abaixo:
int CMyWinApp::Run()
{
GdiplusStartupInput gdiSI;
GdiplusStartupOutput gdiSO;
ULONG_PTR gdiToken;
ULONG_PTR gdiHookToken;
gdiSI.SuppressBackgroundThread = TRUE;
GdiplusStartup(&gdiToken, &gdiSI, &gdiSO);
gdiSO.NotificationHook(&gdiHookToken);
int nRet = CWinApp::Run();
gdiSO.NotificationUnhook(gdiHookToken);
GdiplusShutdown(gdiToken);
return nRet;
}
Se você não suprimir o thread GDI+ em segundo plano, os comandos DDE poderão ser emitidos prematuramente para o aplicativo antes da criação da janela principal. Os comandos DDE emitidos pelo shell podem ser anulados prematuramente, resultando em mensagens de erro.
Arrastar e soltar do Gerenciador de Arquivos
Os arquivos podem ser arrastados da janela de exibição de arquivo no Gerenciador de Arquivos ou Explorador de Arquivos para uma janela em seu aplicativo. É possível, por exemplo, permitir que um ou mais arquivos sejam arrastados para a janela principal de um aplicativo MDI, em que o aplicativo pode recuperar os nomes de arquivo e abrir janelas filho MDI para esses arquivos.
Para habilitar o arrastar e soltar arquivos em seu aplicativo, o Assistente de Aplicativo MFC grava uma chamada para a função membro CWndDragAcceptFiles para sua janela de quadro principal em seu InitInstance
. Remova essa chamada se não quiser implementar o recurso arrastar e soltar.
Observação
Você também pode implementar recursos mais gerais de arrastar e soltar, arrastando dados entre ou dentro de documentos, com o OLE. Para obter informações, confira o artigo Ação do tipo "arrastar e soltar" OLE.
Manter o controle dos documentos usados mais recentemente
À medida que o usuário abre e fecha arquivos, o objeto de aplicativo controla os quatro arquivos usados mais recentemente. Os nomes desses arquivos são adicionados ao menu Arquivo e atualizados quando são alterados. A estrutura armazena esses nomes de arquivo no registro ou no arquivo .ini, com o mesmo nome do projeto e os lê do arquivo quando o aplicativo é iniciado. A InitInstance
substituição que o Assistente de Aplicativo MFC cria para você inclui uma chamada para a função membro CWinAppLoadStdProfileSettings, que carrega informações do registro ou .ini arquivo, incluindo os nomes de arquivo usados mais recentemente.
Essas entradas são armazenadas da seguinte maneira:
Em Windows NT, Windows 2000 e posterior, o valor é armazenado em uma chave do registro.
No Windows 3.x, o valor é armazenado no arquivo WIN.INI.
No Windows 95 e posterior, o valor é armazenado em uma versão armazenada em cache do WIN.INI.