Services CWinApp spéciaux
Outre l’exécution de la boucle de message et vous donnant la possibilité d’initialiser l’application et de propre après celle-ci, CWinApp fournit plusieurs autres services.
Inscription d’interpréteur de commandes
Par défaut, l'Application MFC permet à l'utilisateur d'ouvrir les 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 InitInstance
remplacement qu’il écrit pour vous.
RegisterShellFileTypes
stocke les types de documents de votre application avec l'Explorateur de fichiers ou le gestionnaire de fichiers. La fonction ajoute des entrées à la base de données d'inscription que Windows gère. Les entrées enregistrent chaque type de document, associent une extension au type de fichier, spécifient une ligne de commande pour ouvrir l'application, puis spécifient une commande d'échange dynamique de données (DDE) pour ouvrir un document de ce type.
EnableShellOpen
termine le processus permettant à l'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.
Cette prise en charge d'inscription automatique dans CWinApp
élimine le besoin de fournir un fichier .reg à votre application ou d'exécuter un travail d'installation particulier.
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 NotificationHook
appels doivent NotificationUnhook
ê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 se trouveraient dans un remplacement 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 publiées prématurément dans l'application avant que la fenêtre principale soit créée. Les commandes DDE publiées par le shell peuvent être suspendues prématurément, ce qui aboutit à des messages d'erreur.
Glisser-déplacer du Gestionnaire de fichiers
Les fichiers peuvent être glissés de la fenêtre d'affichage des 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 extraire le nom et les fenêtres enfants MDI ouverts pour ces fichiers.
Pour activer le glisser-déplacer de fichier dans votre application, l’Assistant Application MFC écrit un appel à la fonction membre CWnd DragAcceptFiles pour votre fenêtre d’image principale dans votre InitInstance
. Supprimez cet appel si vous ne souhaitez pas implémenter la fonctionnalité Glisser-déposer.
Remarque
Vous pouvez également implémenter des fonctionnalités Glisser-déposer plus générales (comme faire glisser des données entre ou à l’intérieur de 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 gère les quatre fichiers récemment utilisés. Les noms de ces fichiers sont ajoutés au menu Fichier et mis à jour lorsqu'ils sont modifiés. Le framework stocke ces noms de fichiers dans le Registre ou dans le fichier .ini, avec le même nom que le projet et les lit à partir du fichier au démarrage de votre application. Remplacement InitInstance
que l’Assistant Application MFC crée pour vous inclut un appel à la fonction membre CWinApp LoadStdProfile Paramètres, qui charge des informations à partir du registre ou du fichier .ini, y compris les noms de fichiers les plus récemment utilisés.
Ces entrées sont stockées comme suit :
Dans Windows NT, Windows 2000 ou les versions ultérieures, la valeur est enregistrée dans une clé de Registre.
Dans windows 3.x, la valeur est stockée dans le fichier WIN.INI.
Dans Windows 95 et versions ultérieures, la valeur est stockée dans une version mise en cache du fichier WIN.INI.