TN024: Zprávy a prostředky definované knihovnou MFC
Poznámka
Následující technická poznámka se od prvního zahrnutí do online dokumentace neaktualizovala. V důsledku toho můžou být některé postupy a témata zastaralé nebo nesprávné. Nejnovější informace doporučujeme vyhledat v online indexu dokumentace, které vás zajímá.
Tato poznámka popisuje interní zprávy systému Windows a formáty prostředků používané prostředím MFC. Tyto informace vysvětlují implementaci architektury a pomohou vám při ladění aplikace. Pro dobrodružné, i když jsou všechny tyto informace oficiálně nepodporované, můžete některé z těchto informací použít pro pokročilé implementace.
Tato poznámka obsahuje podrobnosti privátní implementace MFC; veškerý obsah se může v budoucnu změnit. Soukromé zprávy MFC pro Windows mají význam pouze v rozsahu jedné aplikace, ale v budoucnu se změní tak, aby obsahovaly systémové zprávy.
Rozsah soukromých zpráv a typů prostředků MFC jsou v vyhrazeném "systémovém" rozsahu, který microsoft Windows vyhradil. V současné době se nepoužívají všechna čísla v rozsazích a v budoucnu se můžou používat nová čísla v dané oblasti. Aktuálně použitá čísla se můžou změnit.
Soukromé zprávy MFC systému Windows jsou v rozsahu 0x360-0x37F>.
Typy privátních prostředků MFC jsou v rozsahu 0xF0-0xFF>.
MFC – soukromé zprávy systému Windows
Tyto zprávy systému Windows se používají místo virtuálních funkcí jazyka C++, kde se mezi objekty oken vyžaduje relativně volné párování a kde by virtuální funkce jazyka C++ nebyla vhodná.
Tyto soukromé zprávy systému Windows a přidružené struktury parametrů jsou deklarovány v privátní hlavičce MFC AFXPRIV. H'. Upozorňujeme, že jakýkoliv kód, který obsahuje tuto hlavičku, se může spoléhat na nezdokumentované chování a pravděpodobně se přeruší v budoucích verzích mfc.
Ve výjimečných případech, kdy potřebujete zpracovat jednu z těchto zpráv, byste měli použít makro mapování zpráv ON_MESSAGE a zpracovat zprávu v obecném formátu LRESULT/WPARAM/LPARAM.
WM_QUERYAFXWNDPROC
Tato zpráva se odešle do vytvořeného okna. To se odešle velmi brzy v procesu vytváření jako metoda určení, zda WndProc je AfxWndProc. AfxWndProc vrátí hodnotu 1.
Parametry a návratová hodnota | Popis |
---|---|
wParam | Nepoužívá se. |
Lparam | Nepoužívá se. |
vrací | 1, pokud je zpracováno AfxWndProc |
WM_SIZEPARENT
Tato zpráva se odešle oknem rámečku jeho bezprostředním podřízeným položkám během změny velikosti (CFrameWnd::OnSize
volání CFrameWnd::RecalcLayout
, která volání CWnd::RepositionBars
) přemísťuje ovládací panely kolem strany rámečku. Struktura AFX_SIZEPARENTPARAMS obsahuje aktuální dostupný klientský obdélník nadřazeného objektu a HDWP (který může mít hodnotu NULL), s níž se má volat DeferWindowPos
, aby se minimalizovalo překreslení.
Parametry a návratová hodnota | Popis |
---|---|
wParam | Nepoužívá se. |
Lparam | Adresa struktury AFX_SIZEPARENTPARAMS |
vrací | Nepoužívá se (0) |
Ignorování zprávy znamená, že se okno v rozložení nezúčastní.
WM_SETMESSAGESTRING
Tato zpráva se odešle do okna rámce a požádá ho o aktualizaci řádku zprávy na stavovém řádku. Je možné zadat BUĎ ID řetězce, nebo LPCSTR (ale ne obojí).
Parametry a návratová hodnota | Popis |
---|---|
wParam | ID řetězce (nebo nula) |
Lparam | LPCSTR pro řetězec (nebo NULL) |
vrací | Nepoužívá se (0) |
WM_IDLEUPDATECMDUI
Tato zpráva se odesílá v době nečinnosti, která implementuje aktualizaci obslužných rutin uživatelského rozhraní příkazu update-command. Pokud okno (obvykle ovládací panel) zpracovává zprávu, vytvoří CCmdUI
objekt (nebo objekt odvozené třídy) a zavolá CCmdUI::DoUpdate
pro každou z položek v okně. To zase zkontroluje obslužnou rutinu ON_UPDATE_COMMAND_UI pro objekty v řetězu obslužných rutin příkazů.
Parametry a návratová hodnota | Popis |
---|---|
wParam | BOOL bDisableIfNoHandler |
Lparam | Nepoužívá se (0) |
vrací | Nepoužívá se (0) |
bDisableIfNoHandler je nenulová k zakázání objektu uživatelského rozhraní, pokud neexistuje ON_UPDATE_COMMAND_UI ani obslužná rutina ON_COMMAND.
WM_EXITHELPMODE
Tato zpráva se publikuje do CFrameWnd
režimu nápovědy citlivého na kontext. Příjem této zprávy ukončí modální smyčku spuštěnou CFrameWnd::OnContextHelp
.
Parametr a návratová hodnota | Popis |
---|---|
wParam | Nepoužívá se (0) |
Lparam | Nepoužívá se (0) |
vrací | Nepoužívá se. |
WM_INITIALUPDATE
Tato zpráva je odeslána šablonou dokumentu všem potomkům okna rámečku, když je bezpečné, aby mohli provést počáteční aktualizaci. Mapuje se na volání CView::OnInitialUpdate
, ale lze ho použít v jiných CWnd
třídách odvozených pro další jednorázové aktualizace.
Parametry a návratová hodnota | Popis |
---|---|
wParam | Nepoužívá se (0) |
Lparam | Nepoužívá se (0) |
vrací | Nepoužívá se (0) |
WM_RECALCPARENT
Tato zpráva je odeslána zobrazením do nadřazeného okna (získaného prostřednictvím GetParent
) k vynucení přepočtu rozložení (obvykle bude nadřazený volání RecalcLayout
). Používá se v serverových aplikacích OLE, kde je nutné, aby se rámec zvětšil při růstu celkové velikosti zobrazení.
Pokud nadřazené okno zpracuje tuto zprávu, měla by vrátit hodnotu TRUE a vyplnit RECT předaný v lParam novou velikost klientské oblasti. Používá se CScrollView
ke správnému zpracování posuvníků (umístění mimo okno při jejich přidání) při aktivaci objektu serveru.
Parametry a návratová hodnota | Popis |
---|---|
wParam | Nepoužívá se (0) |
Lparam | LPRECT rectClient, může mít hodnotu NULL. |
vrací | TRUE, pokud se vrátí nový obdélník klienta, jinak NEPRAVDA |
WM_SIZECHILD
Tato zpráva se odešle COleResizeBar
do okna vlastníka (prostřednictvím GetOwner
) v případě, že uživatel změní velikost pruhu změny velikosti pomocí úchytů pro změnu velikosti. COleIPFrameWnd
odpoví na tuto zprávu tím, že se pokusí přemístit okno rámce, jak uživatel požaduje.
Nový obdélník zadaný v souřadnicích klienta vzhledem k oknem rámce, který obsahuje pruh změny velikosti, ukazuje lParam.
Parametry a návratová hodnota | Popis |
---|---|
wParam | Nepoužívá se (0) |
Lparam | LPRECT rectNew |
vrací | Nepoužívá se (0) |
WM_DISABLEMODAL
Tato zpráva se odešle do všech automaticky otevíraných oken vlastněných oknem rámečku, které se deaktivuje. Okno rámce pomocí výsledku určí, jestli se má automaticky otevírané okno zakázat.
Můžete ho použít k provedení speciálního zpracování v automaticky otevíraném okně, když rámec přejde do modálního stavu nebo aby určitá automaticky otevíraná okna zůstala zakázaná. Popisy používají tuto zprávu k tomu, aby se zničily, když okno rámce přejde do modálního stavu, například.
Parametry a návratová hodnota | Popis |
---|---|
wParam | Nepoužívá se (0) |
Lparam | Nepoužívá se (0) |
vrací | Nezakažte okno nenulou, 0 znamená, že okno bude zakázané. |
WM_FLOATSTATUS
Tato zpráva se odešle do všech automaticky otevíraných oken vlastněných oknem rámce, když je rámec aktivován nebo deaktivován jiným oknem rámce nejvyšší úrovně. Používá se implementací MFS_SYNCACTIVE v CMiniFrameWnd
, aby aktivace těchto automaticky otevíraných oken byla synchronizovaná s aktivací okna rámce nejvyšší úrovně.
Parametry | Popis |
---|---|
wParam | Je jedna z následujících hodnot: FS_SHOW FS_HIDE FS_ACTIVATE FS_DEACTIVATE FS_ENABLEFS_DISABLE FS_SYNCACTIVE |
Lparam | Nepoužívá se (0) |
Návratová hodnota by měla být nenulová, pokud je nastavená FS_SYNCACTIVE a synchronizace okna provede aktivaci s nadřazeným rámcem. CMiniFrameWnd
vrátí nenulu, pokud je styl nastaven na MFS_SYNCACTIVE.
Další informace naleznete v implementaci .CMiniFrameWnd
WM_ACTIVATETOPLEVEL
Tato zpráva se odešle do okna nejvyšší úrovně, když se aktivuje nebo deaktivuje okno ve skupině nejvyšší úrovně. Okno je součástí skupiny nejvyšší úrovně, pokud se jedná o okno nejvyšší úrovně (bez nadřazeného nebo vlastníka) nebo je vlastníkem takového okna. Tato zpráva se podobá WM_ACTIVATEAPP, ale funguje v situacích, kdy jsou okna patřící různým procesům smíšené v jedné hierarchii oken (společné v aplikacích OLE).
WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE
Tyto zprávy se používají při implementaci kontextové nápovědy. Další informace najdete v technické poznámce 28 .
Formáty privátních prostředků MFC
Mfc v současné době definuje dva formáty privátních prostředků: RT_TOOLBAR a RT_DLGINIT.
formát prostředku RT_TOOLBAR
Výchozí panel nástrojů, který poskytuje AppWizard, je založen na RT_TOOLBAR vlastní prostředek, který byl zaveden v prostředí MFC 4.0. Tento prostředek můžete upravit pomocí editoru nástrojů.
formát prostředku RT_DLGINIT
Jeden formát privátního prostředku MFC slouží k ukládání informací o inicializaci nadbytečných dialogových oken. To zahrnuje počáteční řetězce uložené v poli se seznamem. Formát tohoto prostředku není navržený tak, aby byl ručně upravován, ale zpracovává ho Visual C++.
Visual C++ a tento prostředek RT_DLGINIT nejsou nutné k používání souvisejících funkcí mfc, protože existují alternativy rozhraní API k použití informací v prostředku. Použití jazyka Visual C++ usnadňuje psaní, údržbu a překlad aplikace v dlouhodobém horizontu.
Základní struktura RT_DLGINIT prostředku 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ý oddíl obsahuje ID ovládacího prvku, do které se má zpráva odeslat, #, do které se má odeslat (normální zpráva systému Windows) a proměnná délka dat. Zpráva systému Windows se odešle ve formuláři:
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
Jedná se o velmi obecný formát, který umožňuje všechny zprávy a datový obsah windows. Editor prostředků Visual C++ a mfc podporují pouze omezenou podmnožinu zpráv systému Windows: CB_ADDSTRING pro počáteční volby seznamu pro pole se seznamem (data jsou textový řetězec).
Viz také
Technické poznámky podle čísel
Technické poznámky podle kategorií