Partager via


Services CWinApp spéciaux

Outre l’exécution de la boucle de message et vous donnant la possibilité d’initialiser l’application et de nettoyer après celui-ci, CWinApp fournit plusieurs autres services.

Inscription shell

Par défaut, l’Assistant Application MFC permet à l’utilisateur d’ouvrir des fichiers de données que votre application a créés en double-cliquant dessus dans l’Explorateur de fichiers ou le Gestionnaire de fichiers. Si votre application est une application MDI et que vous spécifiez une extension pour les fichiers créés par votre application, l'Assistant Application MFC ajoute des appels aux fonctions membres RegisterShellFileTypes et EnableShellOpen de CWinApp au remplacement InitInstance qu'il écrit pour vous.

RegisterShellFileTypes inscrit les types de documents de votre application auprès de l’Explorateur de fichiers ou du Gestionnaire de fichiers. La fonction ajoute des entrées à la base de données d’inscription que Windows gère. Les entrées inscrivent chaque type de document, associent une extension de fichier au type de fichier, spécifient une ligne de commande pour ouvrir l’application et spécifient une commande DDE (Dynamic Data Exchange) pour ouvrir un document de ce type.

EnableShellOpen termine le processus en permettant à votre application de recevoir des commandes DDE à partir de l’Explorateur de fichiers ou du Gestionnaire de fichiers pour ouvrir le fichier choisi par l’utilisateur.

La prise en charge automatique de l’inscription dans CWinApp élimine la nécessité de fournir un fichier .reg avec l’application ou de réaliser une installation spécifique.

Si vous souhaitez initialiser GDI+ pour votre application (en appelant GdiplusStartup dans votre fonction InitInstance ), vous devez supprimer le thread d’arrière-plan GDI+.

Pour ce faire, définissez le SuppressBackgroundThread membre de la structure GdiplusStartupInput sur TRUE. Lors de la suppression du thread d’arrière-plan GDI+, les appels NotificationHook et NotificationUnhook doivent être effectués juste avant d’entrer et de quitter la boucle de message de l’application. Pour plus d’informations sur ces appels, consultez GdiplusStartupOutput. Par conséquent, un bon endroit pour appeler GdiplusStartup et les fonctions de notification de hook serait dans une redéfinition de la fonction virtuelle CWinApp::Run, comme indiqué ci-dessous :

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;
}

Si vous ne supprimez pas le thread GDI+ d’arrière-plan, les commandes DDE peuvent être émises prématurément à l’application avant la création de sa fenêtre principale. Les commandes DDE publiées par le shell peuvent être suspendues prématurément, ce qui aboutit à des messages d'erreur.

Glisser-déposer du Gestionnaire de fichiers

Les fichiers peuvent être déplacés de la fenêtre d’affichage de fichiers dans le Gestionnaire de fichiers ou l’Explorateur de fichiers vers une fenêtre de votre application. Vous pouvez, par exemple, activer un ou plusieurs fichiers à faire glisser vers la fenêtre principale d’une application MDI, où l’application peut récupérer les noms de fichiers et ouvrir des fenêtres enfants MDI pour ces fichiers.

Pour activer le glisser-déposer de fichiers dans votre application, l'assistant d'application MFC écrit un appel à la fonction membre CWndDragAcceptFiles pour votre fenêtre principale dans votre InitInstance. Vous pouvez supprimer cet appel si vous ne souhaitez pas implémenter la fonctionnalité glisser-déplacer.

Remarque

Vous pouvez également implémenter des fonctionnalités de glisser-déplacer plus générales ( glisser-déplacer des données entre ou dans des documents) avec OLE. Pour plus d’informations, consultez l’article OLE glisser-déplacer.

Suivi des documents les plus récemment utilisés

Lorsque l’utilisateur ouvre et ferme des fichiers, l’objet d’application effectue le suivi des quatre derniers fichiers utilisés. Les noms de ces fichiers sont ajoutés au menu Fichier et mis à jour lorsqu’ils changent. L’infrastructure stocke ces noms de fichiers dans le Registre ou dans le fichier .ini, avec le même nom que votre projet et les lit à partir du fichier au démarrage de votre application. Le remplacement InitInstance créé par l'Assistant Application MFC inclut un appel à la fonction membre CWinAppLoadStdProfileSettings, qui charge les informations à partir du registre ou du fichier .ini, y compris les noms des fichiers les plus récemment utilisés.

Ces entrées sont stockées comme suit :

  • Dans Windows NT, Windows 2000 et versions ultérieures, la valeur est stockée dans une clé de Registre.

  • Dans Windows 3.x, la valeur est stockée dans win. Fichier INI.

  • Dans Windows 95 et versions ultérieures, la valeur est stockée dans une version mise en cache de WIN. INI.

Voir aussi

CWinApp : classe d’application