Specjalne usługi CWinApp
Oprócz uruchamiania pętli komunikatów i umożliwia zainicjowanie aplikacji i wyczyszczenie jej po niej, CWinApp udostępnia kilka innych usług.
Rejestracja powłoki
Domyślnie Kreator aplikacji MFC umożliwia użytkownikowi otwieranie plików danych utworzonych przez aplikację przez dwukrotne kliknięcie ich w Eksplorator plików lub Menedżerze plików. Jeśli aplikacja jest aplikacją MDI i określasz rozszerzenie dla plików tworzonych przez aplikację, Kreator aplikacji MFC dodaje wywołania do funkcji składowych RegisterShellFileTypes i EnableShellOtwórz funkcje członkowskie CWinApp do InitInstance
zastąpienia, które zapisuje.
RegisterShellFileTypes
rejestruje typy dokumentów aplikacji za pomocą Eksplorator plików lub Menedżera plików. Funkcja dodaje wpisy do bazy danych rejestracji obsługiwanej przez system Windows. Wpisy rejestrują każdy typ dokumentu, kojarzą rozszerzenie pliku z typem pliku, określ wiersz polecenia, aby otworzyć aplikację, i określ dynamiczne polecenie wymiany danych (DDE), aby otworzyć dokument tego typu.
EnableShellOpen
kończy proces, umożliwiając aplikacji odbieranie poleceń DDE z Eksplorator plików lub Menedżera plików w celu otwarcia pliku wybranego przez użytkownika.
Ta automatyczna obsługa rejestracji w programie CWinApp
eliminuje konieczność wysłania pliku reg z aplikacją lub wykonania specjalnej pracy instalacyjnej.
Jeśli chcesz zainicjować interfejs GDI+ dla aplikacji (wywołując element GdiplusStartup w funkcji InitInstance ), musisz pominąć wątek tła GDI+ .
Można to zrobić, ustawiając SuppressBackgroundThread
element członkowski struktury GdiplusStartupInput na true. Podczas pomijania wątku NotificationHook
w tle GDI+ wywołania i NotificationUnhook
powinny być wykonywane tuż przed wejściem i zamknięciem pętli komunikatów aplikacji. Aby uzyskać więcej informacji na temat tych wywołań, zobacz GdiplusStartupOutput. W związku z tym dobrym miejscem do wywołania GdiplusStartup
i funkcji powiadomień haka byłoby zastąpienie funkcji wirtualnej CWinApp::Run, jak pokazano poniżej:
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;
}
Jeśli nie pomijasz wątku GDI+ w tle, polecenia DDE mogą zostać przedwcześnie wydane dla aplikacji przed utworzeniem jej głównego okna. Polecenia DDE wydane przez powłokę mogą zostać przedwcześnie przerwane, co powoduje wyświetlenie komunikatów o błędach.
Przeciąganie i upuszczanie Menedżera plików
Pliki można przeciągać z okna widoku plików w Menedżerze plików lub Eksplorator plików do okna w aplikacji. Możesz na przykład włączyć przeciągnięcie co najmniej jednego pliku do głównego okna aplikacji MDI, w którym aplikacja może pobrać nazwy plików i otworzyć okna podrzędne MDI dla tych plików.
Aby włączyć przeciąganie i upuszczanie pliku w aplikacji, Kreator aplikacji MFC zapisuje wywołanie funkcji składowej CWnd DragAcceptFiles dla głównego okna ramki w pliku InitInstance
. Możesz usunąć to wywołanie, jeśli nie chcesz implementować funkcji przeciągania i upuszczania.
Uwaga
Można również zaimplementować bardziej ogólne możliwości przeciągania i upuszczania — przeciągania danych między dokumentami lub wewnątrz nich — za pomocą ole. Aby uzyskać informacje, zobacz artykuł OLE przeciągnij i upuść.
Śledzenie ostatnio używanych dokumentów
Gdy użytkownik otwiera i zamyka pliki, obiekt aplikacji śledzi cztery ostatnio używane pliki. Nazwy tych plików są dodawane do menu Plik i aktualizowane po ich zmianie. Struktura przechowuje te nazwy plików w rejestrze lub w pliku ini o takiej samej nazwie jak projekt i odczytuje je z pliku podczas uruchamiania aplikacji. Zastąpienie InitInstance
tworzone przez Kreatora aplikacji MFC obejmuje wywołanie funkcji składowej CWinApp LoadStdProfile Ustawienia która ładuje informacje z rejestru lub pliku ini, w tym ostatnio używane nazwy plików.
Te wpisy są przechowywane w następujący sposób:
W systemie Windows NT, Windows 2000 i nowszych wartość jest przechowywana w kluczu rejestru.
W systemie Windows 3.x wartość jest przechowywana w win. Plik INI.
W systemie Windows 95 lub nowszym wartość jest przechowywana w buforowanej wersji win. INI.