Spezielle CWinApp-Dienste

Neben dem Ausführen der Nachrichtenschleife und der Möglichkeit, die Anwendung zu initialisieren und danach sauber, bietet CWinApp mehrere andere Dienste an.

Shellregistrierung

Standardmäßig ermöglicht der MFC-Anwendungs-Assistent dem Benutzer das Öffnen von Datendateien, die Ihre Anwendung erstellt hat, indem sie in Explorer oder Datei-Manager doppelklicken. Wenn Ihre Anwendung eine MDI-Anwendung ist und Sie eine Erweiterung für die Dateien angeben, die Ihre Anwendung erstellt, fügt der MFC-Anwendungs-Assistent Aufrufe der Memberfunktionen RegisterShellFileTypes und EnableShellOpen von CWinApp hinzu, um die InitInstance Außerkraftsetzung, die sie für Sie schreibt, hinzu.

RegisterShellFileTypesregistriert die Dokumenttypen Ihrer Anwendung mit Explorer oder Datei-Manager. Die Funktion fügt Einträge zur Registrierungsdatenbank hinzu, die Windows Standard enthält. Die Einträge registrieren jeden Dokumenttyp, ordnen eine Dateierweiterung dem Dateityp zu, geben eine Befehlszeile an, um die Anwendung zu öffnen, und geben Sie einen DDE-Befehl (Dynamic Data Exchange) an, um ein Dokument dieses Typs zu öffnen.

EnableShellOpenschließt den Vorgang ab, indem Ihre Anwendung DDE-Befehle von Explorer oder Datei-Manager empfangen kann, um die vom Benutzer ausgewählte Datei zu öffnen.

Diese automatische Registrierungsunterstützung beseitigt CWinApp die Notwendigkeit, eine REG-Datei mit Ihrer Anwendung zu versenden oder spezielle Installationsarbeiten durchzuführen.

Wenn Sie GDI+ für Ihre Anwendung initialisieren möchten (indem Sie GdiplusStartup in Ihrer InitInstance-Funktion aufrufen), müssen Sie den GDI+-Hintergrundthread unterdrücken.

Sie können dies tun, indem Sie das SuppressBackgroundThread Element der GdiplusStartupInput-Struktur auf TRUE festlegen. Beim Unterdrücken des GDI+-Hintergrundthreads sollten die NotificationHook und NotificationUnhook die Aufrufe unmittelbar vor dem Betreten und Beenden der Nachrichtenschleife der Anwendung erfolgen. Weitere Informationen zu diesen Aufrufen finden Sie unter GdiplusStartupOutput. Daher wäre ein guter Ort zum Aufrufen GdiplusStartup und die Hook-Benachrichtigungsfunktionen in einer Außerkraftsetzung der virtuellen Funktion CWinApp::Run, wie unten dargestellt:

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

Wenn Sie den GDI+-Hintergrundthread nicht unterdrücken, können DDE-Befehle vorzeitig an die Anwendung ausgegeben werden, bevor das Standard Fenster erstellt wurde. Die von der Shell ausgegebenen DDE-Befehle können vorzeitig abgebrochen werden, was zu Fehlermeldungen führt.

Datei-Manager Ziehen und Ablegen

Dateien können aus dem Dateiansichtsfenster im Datei-Manager oder Explorer in ein Fenster in Ihrer Anwendung gezogen werden. Sie können beispielsweise aktivieren, dass eine oder mehrere Dateien in das Standard Fenster einer MDI-Anwendung gezogen werden, in dem die Anwendung die Dateinamen abrufen und untergeordnete MDI-Fenster für diese Dateien öffnen kann.

Um das Ziehen und Ablegen von Dateien in Ihrer Anwendung zu aktivieren, schreibt der MFC-Anwendungs-Assistent einen Aufruf der CWnd-MemberfunktionDragAcceptFiles für Ihr Standard Framefenster in Ihrem InitInstance. Sie können diesen Aufruf entfernen, wenn Sie das Drag-and-Drop-Feature nicht implementieren möchten.

Hinweis

Sie können auch allgemeinere Drag-and-Drop-Funktionen implementieren , indem Sie Daten zwischen oder innerhalb von Dokumenten mit OLE ziehen. Weitere Informationen finden Sie im Artikel OLE-Ziehen und -Ablegen.

Nachverfolgen der zuletzt verwendeten Dokumente

Wenn der Benutzer Dateien öffnet und schließt, verfolgt das Anwendungsobjekt die vier zuletzt verwendeten Dateien. Die Namen dieser Dateien werden dem Menü "Datei" hinzugefügt und aktualisiert, wenn sie sich ändern. Das Framework speichert diese Dateinamen entweder in der Registrierung oder in der INI-Datei, mit demselben Namen wie Ihr Projekt und liest sie aus der Datei vor, wenn die Anwendung gestartet wird. Die InitInstance Außerkraftsetzung, die der MFC-Anwendungs-Assistent für Sie erstellt, enthält einen Aufruf der CWinApp-MemberfunktionLoadStdProfile Einstellungen, die Informationen aus der Registrierung oder INI-Datei lädt, einschließlich der zuletzt verwendeten Dateinamen.

Diese Einträge werden wie folgt gespeichert:

  • In Windows NT, Windows 2000 und höher wird der Wert in einem Registrierungsschlüssel gespeichert.

  • In Windows 3.x wird der Wert im WIN gespeichert. INI-Datei.

  • In Windows 95 und höher wird der Wert in einer zwischengespeicherten Version von WIN gespeichert. INI.

Siehe auch

CWinApp: Die Anwendungsklasse