Partilhar via


Serviços Especiais CWinApp

Além de executar o loop de mensagens e dar-lhe a oportunidade de inicializar o aplicativo e limpar depois dele, CWinApp fornece vários outros serviços.

Registo Shell

Por padrão, o MFC Application Wizard possibilita que o usuário abra arquivos de dados que seu aplicativo criou clicando duas vezes neles no Explorador de Arquivos ou no Gerenciador de Arquivos. Se o seu aplicativo for um aplicativo MDI e especificar uma extensão para os ficheiros que o seu aplicativo cria, o Assistente de Aplicações MFC adicionará chamadas para as funções membro RegisterShellFileTypes e EnableShellOpen do CWinApp à sobreposição que escreve para si.

RegisterShellFileTypes regista os tipos de documentos da sua aplicação no Explorador de Ficheiros ou no Gestor de Ficheiros. 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 (dynamic data exchange) 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.

Este suporte de registo automático em CWinApp elimina a necessidade de enviar um ficheiro .reg com a sua aplicação ou de fazer um trabalho de instalação especial.

Se você quiser inicializar GDI+ para seu aplicativo (chamando GdiplusStartup em sua função InitInstance ), você tem que suprimir o thread em segundo plano GDI+.

Você pode fazer isso definindo o SuppressBackgroundThread membro da estrutura GdiplusStartupInput como TRUE. Ao suprimir o thread de fundo do GDI+, as chamadas NotificationHook e NotificationUnhook devem ser feitas imediatamente antes de entrar e sair do loop de mensagens da aplicação. 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 seria numa reimplementação da função virtual CWinApp::Run, como 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 podem ser emitidos prematuramente para o aplicativo antes que sua janela principal tenha sido criada. Os comandos DDE emitidos pelo shell podem ser abortados prematuramente, resultando em mensagens de erro.

Arrastar e soltar do Gerenciador de arquivos

Os ficheiros podem ser arrastados da janela de visualização de ficheiros no Gestor de Ficheiros ou no Explorador de Ficheiros para uma janela na sua aplicação. Você pode, por exemplo, permitir que um ou mais arquivos sejam arrastados para a janela principal de um aplicativo MDI, onde o aplicativo pode recuperar os nomes de arquivo e abrir janelas filhas MDI para esses arquivos.

Para ativar o recurso de arrastar e soltar arquivos na sua aplicação, o MFC Application Wizard escreve uma chamada para a função-membro CWndDragAcceptFiles para a sua janela principal no seu aplicativoInitInstance. Você pode remover essa chamada se não quiser implementar o recurso de 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, consulte o artigo OLE arrastar e soltar.

Mantendo o controle dos documentos usados mais recentemente

À medida que o usuário abre e fecha arquivos, o objeto do aplicativo controla os quatro arquivos usados mais recentemente. Os nomes desses arquivos são adicionados ao menu Arquivo e atualizados quando eles são alterados. A estrutura armazena esses nomes de arquivo no registro ou no arquivo .ini, com o mesmo nome do seu projeto e os lê do arquivo quando seu aplicativo é iniciado. A substituição padrão que o MFC Application Wizard cria inclui uma chamada para a função membro InitInstanceLoadStdProfileSettings, que carrega informações do registo ou do arquivo .ini, incluindo os nomes de ficheiros usados mais recentemente.

Estas entradas são armazenadas da seguinte forma:

  • No 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 em cache do WIN. INI.

Ver também

CWinApp: A classe de aplicativo