Sdílet prostřednictvím


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 CWndtří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í