Speciální služby CWinApp
Kromě spuštění smyčky zprávy a poskytnutí příležitosti k inicializaci aplikace a vyčištění po ní poskytuje CWinApp několik dalších služeb.
Registrace prostředí
Průvodce aplikací MFC ve výchozím nastavení umožňuje uživateli otevírat datové soubory, které aplikace vytvořila poklikáním v Průzkumník souborů nebo Správci souborů. Pokud je vaše aplikace aplikací MDI a zadáte příponu pro soubory, které aplikace vytvoří, průvodce aplikací MFC přidá volání registerShellFileTypes a EnableShellOpen členské funkce CWinApp k InitInstance
přepsání, které za vás zapíše.
RegisterShellFileTypes
zaregistruje typy dokumentů vaší aplikace pomocí Průzkumník souborů nebo Správce souborů. Funkce přidá položky do registrační databáze, kterou systém Windows udržuje. Položky registrují každý typ dokumentu, přidruží příponu souboru k typu souboru, určí příkazový řádek pro otevření aplikace a zadá příkaz dynamické výměny dat (DDE) pro otevření dokumentu tohoto typu.
EnableShellOpen
dokončí proces tím, že aplikaci umožní přijímat příkazy DDE z Průzkumník souborů nebo Správce souborů k otevření souboru vybraného uživatelem.
Tato automatická podpora CWinApp
registrace eliminuje nutnost expedovat soubor .reg s vaší aplikací nebo provádět speciální instalační práci.
Pokud chcete inicializovat GDI+ pro vaši aplikaci (voláním GdiplusStartup ve funkci InitInstance ), musíte potlačit vlákno GDI+ na pozadí.
Můžete to provést nastavením SuppressBackgroundThread
členu GdiplusStartupInput struktury na TRUE. Při potlačení vlákna NotificationHook
GDI+ na pozadí by se měla provést volání NotificationUnhook
těsně před vstupem a ukončením smyčky zpráv aplikace. Další informace o těchto voláních najdete v tématu GdiplusStartupOutput. Proto by vhodné místo pro volání GdiplusStartup
a funkce oznámení hooku byly v přepsání virtuální funkce CWinApp::Run, jak je znázorněno níže:
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;
}
Pokud nepotlačíte vlákno GDI+ na pozadí, příkazy DDE mohou být předčasně vydány aplikaci před vytvořením hlavního okna. Příkazy DDE vydané prostředím můžou být předčasně přerušeny, což vede k chybám.
Přetažení správce souborů
Soubory lze přetáhnout z okna zobrazení souborů ve Správci souborů nebo Průzkumník souborů do okna ve vaší aplikaci. Můžete například povolit přetažení jednoho nebo více souborů do hlavního okna aplikace MDI, kde by aplikace mohla načíst názvy souborů a otevřít podřízená okna MDI pro tyto soubory.
Chcete-li povolit přetažení souboru v aplikaci, Průvodce aplikací MFC zapíše volání do CWnd členské funkce DragAcceptFiles pro okno hlavního rámce v okně InitInstance
. Toto volání můžete odebrat, pokud nechcete implementovat funkci přetažení.
Poznámka
Můžete také implementovat obecnější možnosti přetahování myší – přetahování dat mezi dokumenty nebo v rámci dokumentů – pomocí OLE. Informace naleznete v článku OLE přetažení.
Sledování naposledy použitých dokumentů
Když uživatel otevře a zavře soubory, objekt aplikace sleduje čtyři naposledy použité soubory. Názvy těchto souborů se přidají do nabídky Soubor a při změně se aktualizují. Architektura ukládá tyto názvy souborů buď v registru, nebo v souboru .ini se stejným názvem jako váš projekt a při spuštění aplikace je načte ze souboru. PřepsáníInitInstance
, které průvodce aplikací MFC vytvoří za vás, zahrnuje volání členské funkce CWinApp LoadStdProfile Nastavení, která načte informace z registru nebo souboru .ini, včetně naposledy použitých názvů souborů.
Tyto položky jsou uloženy takto:
V systému systém Windows NT Se systémem Windows 2000 a novějším se hodnota uloží do klíče registru.
Ve Windows 3.x je hodnota uložena v systému WIN. SOUBOR INI.
Ve Windows 95 a novějších je hodnota uložena ve verzi WIN uložené v mezipaměti. INI.