Partilhar via


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.

EnableShellOpenconclui 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.

Confira também

CWinApp: a classe do aplicativo