Spezielle CWinApp-Dienste
Neben dem Ausführen der Nachrichtenschleife und dem Geben Sie eine Möglichkeit, die Anwendung zu initialisieren und nach Umgebung zu bereinigen, stellt CWinApp mehrere andere Dienste.
Shell-Registrierung
Standardmäßig macht der MFC-Anwendungs-Assistent es möglich, dass der Benutzer Datendateien öffnet, die Anwendung erstellt wurde, indem Sie im Datei-Explorer oder im Datei-Manager doppelt geklickt hat. Wenn die Anwendung eine MDI-Anwendung ist und Sie eine Erweiterung für die Dateien angeben, die die Anwendung erstellt, fügt der MFC-Anwendungs-Assistent Aufrufe RegisterShellFileTypes hinzu und EnableShellOpen-Memberfunktionen von CWinApp zu InitInstance überschreiben, damit es für Sie.
RegisterShellFileTypes registriert die Dokumenttypen der Anwendung mit Datei-Explorer oder Datei-Manager. Die Funktion werden dem der Registrierungsdatenbank hinzu, die Windows beibehält. Die Einträge registrieren jeden Dokumenttyp, ordnen eine Dateierweiterung mit dem Dateityp zu, geben eine Befehlszeile an, um die Anwendung zu öffnen und ein Befehl (DDE)- des dynamischen Datenaustauschs an, ein Dokument dieses Typs zu öffnen.
EnableShellOpen enthält den Prozess ab, indem es ermöglicht, eine Anwendung DDE-Befehle Explorer oder Datei-Manager von Datei zu erhalten, die Datei öffnen, die vom Benutzer ausgewählt wird.
Diese automatische Registrierungsunterstützung in CWinApp entfällt die Notwendigkeit, eine REG-Datei mit der Anwendung erfordert oder Sondereinbauarbeit erledigt.
GDI+ Wenn Sie für die Anwendung initialisiert werden sollen (durch Aufrufen von GdiplusStartup in der InitInstance-Funktion), müssen Sie den GDI+-Hintergrundthread unterdrücken.
Sie erreichen dies, indem Sie dem SuppressBackgroundThread-Member der Struktur GdiplusStartupInput auf TRUE festlegen. Wenn Sie den GDI+-Hintergrundthread unterdrückt, sollten NotificationHook und die NotificationUnhook - Aufrufe (siehe GdiplusStartupOutput), nur vor dem Eingeben und beenden der Meldungsschleife der Anwendung aufgerufen werden. Deshalb wäre ein gut, um von GdiplusStartup aufzurufen und die Hookbenachrichtigungsfunktionen in einer Überschreibung der virtuellen Funktion CWinApp::Run, wie unten sein:
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 der Hintergrund GDI+-Thread unterdrücken, können DDE-Befehle zur Anwendung vorzeitig ausgegeben werden, bevor sein Hauptfenster erstellt wurde. Die DDE-Befehle, die von der Shell, ausgegeben werden können, d Fehlermeldungen vorzeitig abgebrochen werden.
Datei-Manager-Drag & Drop
Dateien können im Dateiansichtsfenster im Datei-Manager oder im Datei-Explorer zu einem Fenster in der Anwendung gezogen werden. Sie haben beispielsweise mindestens eine an das Hauptfenster zu ziehende Dateien, einer MDI-Anwendung, in dem die Anwendung die Dateinamen abrufen und untergeordnete MDI-Fenster für diese Dateien öffnen kann.
Um Datei-Drag& Drop in Ihrer Anwendung aktivieren können, erstellt der MFC-Anwendungs-Assistent einen Aufruf der Memberfunktion CWndDragAcceptFiles für das Hauptrahmenfenster im InitInstance. Sie können diesen Aufruf entfernen, wenn die Drag & Drop-Funktion implementieren möchten.
Hinweis
Sie können Drag allgemeineren & Drop implementieren auch Daten Dokument-mit OLE zwischen oder darin Funktion-ziehend.Weitere Informationen finden Sie im Artikel Drag & Drop (OLE).
Verfolgen der zuletzt verwendeten Dokumente
Wenn der Benutzer Dateien öffnet und schließt, verwaltet das Anwendungsobjekt die vier zuletzt verwendeten Dateien nachverfolgt. Die Namen dieser Dateien werden zur Menü hinzugefügt und aktualisiert, wenn sie ändern. Das Framework speichert diese Dateinamen entweder in der Registrierung oder in der INI-Datei, mit dem gleichen Namen wie das Projekt und liest sie aus der Datei, wenn die Anwendung startet oben. Die InitInstance, die Überschreibung der MFC-Anwendungs-Assistent für Sie erstellt, enthält einen Aufruf der Memberfunktion CWinAppLoadStdProfileSettings, die Informationen aus der Registrierung oder der INI-Datei lädt, einschließlich die zuletzt verwendeten Dateinamen.
Diese Einträge gespeichert werden, wie folgt:
In Windows NT wird Windows 2000 und höher, der Wert in einen Registrierungsschlüssel gespeichert.
In Windows 3.x, wird der Wert in der WIN.INI-Datei gespeichert.
In Windows 95 und höher, wird der Wert in eine zwischengespeicherte Version von WIN.INI gespeichert.