TN024: Zprávy a prostředky definované knihovnou MFC
[!POZNÁMKA]
Následující technická poznámka nebyla aktualizována, protože byla poprvé zahrnuta v dokumentaci online.V důsledku toho některé postupy a témata mohou být nesprávné nebo zastaralé.Pro nejnovější informace je vhodné vyhledat téma zájmu v dokumentaci online index.
Tato poznámka popisuje interní zprávy systému Windows a formáty zdrojů používá knihovnu MFC.Tyto informace popisuje provádění rámce a bude vám pomohou při ladění aplikace.Pro dobrodružná i když tyto informace není oficiálně podporována, můžete použít některé z těchto informací pro pokročilé implementace.
Tato poznámka obsahuje podrobnosti implementace soukromé knihovny MFC; celý obsah podléhají změnám v budoucnosti.Soukromé zprávy systému Windows MFC mají význam v oboru pouze jednu aplikaci, ale bude obsahovat systémové zprávy v budoucnu změnit.
Rozsah MFC soukromých zpráv systému Windows a typy prostředků jsou v dosahu rezervovaného "systém" vyhrazeny systémem Microsoft Windows.Aktuálně nejsou všechna čísla v oblasti se používají a v budoucnu mohou nová čísla v rozsahu použity.Aktuálně používaná čísla mohou být změněny.
Soukromé zprávy systému Windows MFC jsou v rozsahu 0x360 ->0x37F.
Typy soukromých prostředků knihovny MFC jsou v rozsahu 0xF0 ->0xFF.
Zprávy systému Windows soukromé knihovny MFC
Tyto zprávy systému Windows se používají místo virtuálních funkcí jazyka C++, kde je relativně volné spojování požadována mezi objekty okna a kde by nebylo vhodné virtuální funkce jazyka C++.
Tyto soukromé zprávy systému Windows a parametru přidružené struktury jsou deklarovány v soukromé knihovny MFC záhlaví ' AFXPRIV.H ".Být varován, že žádný kód, který obsahuje tuto hlavičku může spoléhat na nezdokumentovaný chování a bude pravděpodobně konec v budoucích verzí knihovny MFC.
Ve výjimečném případě potřebuje ke zpracování jednoho z těchto zpráv, měli byste použít ON_MESSAGE zpráva makro mapy a zpracovat zprávu ve formátu Obecný LRESULT, WPARAM/LPARAM.
WM_QUERYAFXWNDPROC
Tato zpráva je odeslána do okna, která je vytvářena.Velmi brzy v procesu vytváření je odeslána jako metodu pro zjištění, zda je WndProc AfxWndProc.AfxWndProc vrátí hodnotu 1.
wParam |
Nepoužito |
lParam |
Nepoužito |
vrací |
1, pokud jsou zpracovávány AfxWndProc |
WM_SIZEPARENT
Je tato zpráva odeslána v rámci okna její bezprostředně podřízené při změně velikosti (CFrameWnd::OnSize volání CFrameWnd::RecalcLayout který vyzývá CWnd::RepositionBars) Chcete-li změnit umístění ovládací panely kolem straně rámečku.AFX_SIZEPARENTPARAMS struktura obsahuje aktuální obdélník klient k dispozici nadřazené a HDWP, (který může mít hodnotu NULL), se kterým lze volat DeferWindowPos k minimalizaci překreslení.
wParam |
Nepoužito |
lParam |
Adresa AFX_SIZEPARENTPARAMS konstrukce |
vrací |
Nepoužito (0) |
Ignoruje zprávy označuje, že okno není účastnit rozložení.
WM_SETMESSAGESTRING
Tato zpráva je zaslána okna rámce požadovat aktualizaci ve stavovém řádku zpráva.ID řetězce nebo LPCSTR může být zadaná (ale nikoli obě).
wParam |
Řetězec ID (nebo nula) |
lParam |
LPCSTR řetězec (nebo NULL) |
vrací |
Nepoužito (0) |
WM_IDLEUPDATECMDUI
Tato zpráva zaslána v nečinnosti implementovat obslužné rutiny uživatelského rozhraní příkaz update aktualizace doby nečinnosti.Pokud okno (obvykle ovládací panel) zpracovává zprávy, vytvoří CCmdUI (nebo objektu odvozené třídy) a CCmdUI::DoUpdate pro jednotlivé "položky" v okně.To bude zase vyhledávat ON_UPDATE_COMMAND_UI obslužnou rutinu pro objekty v řetězci příkazu rutině.
wParam |
BOOL bDisableIfNoHandler |
lParam |
Nepoužito (0) |
vrací |
Nepoužito (0) |
bDisableIfNoHandler je nenulová zakázat objekt uživatelského rozhraní, pokud není ani ON_UPDATE_COMMAND_UI ani ON_COMMAND obslužnou rutinu.
WM_EXITHELPMODE
Tato zpráva je zaúčtována do CFrameWnd režim, ukončete kontextové nápovědy.Přijetí této zprávy ukončení modální smyčky spustil CFrameWnd::OnContextHelp.
wParam |
Nepoužito (0) |
lParam |
Nepoužito (0) |
vrací |
Nepoužito |
WM_INITIALUPDATE
Tuto zprávu zasílá šablona dokumentu na všechny následovníky rámeček okna kdy je bezpečné, aby se jejich původní aktualizaci.Odpovídá volání CView::OnInitialUpdate , ale lze použít v jiných CWnd-odvozené třídy jiné jednorázové aktualizace.
wParam |
Nepoužito (0) |
lParam |
Nepoužito (0) |
vrací |
Nepoužito (0) |
WM_RECALCPARENT
Tuto zprávu odesílá zobrazení jeho nadřazeného okna (získaných prostřednictvím GetParent) vynucení přepočtu rozložení (obvykle bude volat nadřazeného RecalcLayout).To je používán aplikací typu server OLE je-li nezbytné pro snímek zvětšovat velikost zvětšuje celkovou velikost zobrazení.
Pokud tuto zprávu zpracuje nadřazené okno by ji vrátí hodnotu PRAVDA a zadejte RECT předaný lParam s novou velikost oblasti klienta.Používá se v CScrollView správně zpracovat posuvníky (místo pak na vnější straně okna při přidání) při objekt serveru je aktivován v místě.
wParam |
Nepoužito (0) |
lParam |
Může být NULL, LPRECT rectClient, |
vrací |
TRUE, pokud nový klient obdélníku vrátil, FALSE jinak |
WM_SIZECHILD
Tato zpráva je odeslána uživatelem COleResizeBar do jeho okna vlastníka (prostřednictvím GetOwner) Pokud uživatel změní velikost příčku s úchyty pro změnu velikosti.COleIPFrameWndpokus přesunout okno rámce jako uživatel požadoval reaguje na tuto zprávu.
Nový obdélník, podle klienta souřadnice vztažené ke okno rámce, který obsahuje na příčku je na který odkazuje lParam.
wParam |
Nepoužito (0) |
lParam |
LPRECT rectNew |
vrací |
Nepoužito (0) |
WM_DISABLEMODAL
Tato zpráva je odeslána všechna automaticky otevíraná okna, které vlastní okno rámce, který se právě ruší.Okno rámce používá k určení, zda chcete zakázat kontextovou výsledek.
Můžete to provést zvláštní zpracování v překryvném okně, když snímek přejde modální stavu nebo zabránit některá automaticky otevíraná okna Začínáme zakázána.Popisy zničit sami při okna rámce přejde do stavu modální, například pomocí této zprávy.
wParam |
Nepoužito (0) |
lParam |
Nepoužito (0) |
vrací |
Nenulová na Ne zakázat okno, hodnota 0 znamená, že okna budou zakázány. |
WM_FLOATSTATUS
Tato zpráva je odeslána všechna automaticky otevíraná okna vlastní okno rámce při rámeček aktivován nebo vyřadí z jiného okna rámec nejvyšší úrovně.Používá se zavedením MFS_SYNCACTIVE v CMiniFrameWnd, pro synchronizaci aktivace těchto oken s aktivací okna nejvyšší úrovně rámce.
wParam |
Je jedna z následujících hodnot: FS_SHOW FS_HIDE FS_ACTIVATE FS_DEACTIVATE FS_ENABLEFS_DISABLE FS_SYNCACTIVE |
lParam |
Nepoužito (0) |
Vrácená hodnota by měla být nulová-li FS_SYNCACTIVE je sada a synchronizuje okna jeho aktivace s nadřazeného rámce.CMiniFrameWndvrátí nenulovou hodnotu, pokud styl je nastavena na MFS_SYNCACTIVE.
Další informace naleznete v tématu provádění CMiniFrameWnd.
WM_ACTIVATETOPLEVEL
Tato zpráva je zaslána okno nejvyšší úrovně při aktivaci nebo deaktivaci okno v jeho "skupiny nejvyšší úrovně".Okno je součástí skupiny nejvyšší úrovně, pokud je okno nejvyšší úrovně (žádný nadřazený nebo vlastník) nebo vlastníkem takového okna.Tato zpráva má podobné využití k na WM_ACTIVATEAPP, , ale pracuje v situacích, kde se míchají náležející k jiné procesy systému windows v hierarchii jediné okno (běžné aplikace OLE).
WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE
Tyto zprávy jsou používány při provádění kontextovou nápovědu.Najdete na Technická poznámka: 28 pro další informace.
Formáty zdrojů soukromé knihovny MFC
V současné době MFC definuje dva formáty soukromé zdroje: RT_TOOLBAR a RT_DLGINIT.
Formát zdroje RT_TOOLBAR
Je na základě poskytnutých AppWizard výchozí panel nástrojů RT_TOOLBAR vlastní zdroj, který byl zaveden v MFC 4.0.Můžete upravit tento prostředek použití editoru panelu nástrojů.
Formát zdroje RT_DLGINIT
Jeden formát soukromých prostředků MFC slouží k ukládání další dialogové okno informace o inicializaci.Jedná se o původní řetězce uložené v poli se seznamem.Formát tohoto prostředku není určen k ručně upravili, ale je zpracována Visual C++.
Visual C++ a to RT_DLGINIT prostředku nemusí používat související funkce knihovny MFC, protože rozhraní API alternativou k použití informací v prostředku.Pomocí Visual C++ proto jednodušší psát, udržovat a přeložit aplikaci dlouhodobě.
Základní struktura RT_DLGINIT prostředků je následující:
+---------------+ \
| Control ID | UINT |
+---------------+ |
| Message # | UINT |
+---------------+ |
|length of data | DWORD |
+---------------+ | Repeated
| Data | Variable Length | for each control
| ... | and Format | and message
+---------------+ /
| 0 | BYTE
+---------------+
Opakovaná část obsahuje ID ovládacího prvku, který chcete odeslat zprávu, je zpráva # odeslat (normální zprávy systému Windows) a proměnné délky dat.Ve formuláři je odeslána zpráva systému Windows:
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
Toto je velmi obecný formát, umožňující jakékoli zprávy systému Windows a data obsahu.V editoru prostředků Visual C++ a MFC podporují pouze omezený okruh zprávy systému Windows: CB_ADDSTRING pro počáteční seznam voleb pro pole se seznamem (data je textový řetězec).