Compartilhar via


Serviços especiais do CWinApp

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

Registro do 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 no 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 o Explorador de Arquivos ou o 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âmica) 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 especial de instalação.

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 de plano de fundo GDI+, as chamadas NotificationHook e NotificationUnhook devem ser feitas imediatamente antes de entrar e sair do loop de mensagens 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.

Gerenciador de Arquivos: Arrastar e Soltar

Os arquivos podem ser arrastados da janela de exibição de arquivo no Gerenciador de Arquivos ou no Explorador de Arquivos para uma janela em seu aplicativo. Você pode, por exemplo, permitir que um ou mais arquivos sejam arrastados para a janela principal de um aplicativo MDI, onde o aplicativo possa recuperar os nomes dos arquivos e abrir janelas filhas 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. 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, confira o artigo Ação do tipo "arrastar e soltar" OLE.

Mantendo o controle dos documentos usados mais recentemente

À medida que o usuário abre e fecha arquivos, o objeto de aplicativo mantém o controle dos 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:

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

Consulte também

CWinApp: a classe de aplicativo