TN024: MFC визначені повідомлення та ресурси

Цієї записці описується внутрішніх повідомлень Windows і ресурс форматів MFC. Про це пояснює реалізації Рамкової і допомогти вам в налагодженні вашого застосування. За пригодами хоча ця інформація є офіційно не підтримується, ви можете використовувати цю інформацію для просунутих реалізацій.

Примітка містить MFC деталей приватних реалізації; весь вміст можуть бути змінені в майбутньому. MFC приватних повідомлень Windows мають значення в сферу тільки одна заявка, але зміниться в майбутньому містити системної повідомлень.

Діапазон MFC приватних повідомлень Windows і типів ресурс є діапазону зарезервований "система" Виділити Microsoft Windows. В даний час не всіх чисел у діапазонах, які використовуються, і в майбутньому, нові номери діапазону можуть бути використані. В даний час використовуються числа можуть змінюватися.

MFC приватних Windows не в діапазоні 0x360 > повідомлення; 0x37F.

MFC приватних ресурс типи, в діапазоні 0xF0 > 0xFF.

MFC приватних повідомлень Windows

Ці повідомлення Windows використовується в якості C++ віртуальних функцій де відносно звязку необхідна між об'єкти вікон і де C++ віртуальних функцій не буде відповідної.

Ці приватні повідомлення Windows і відповідного параметра структури були оголошені в заголовку приватних MFC ' AFXPRIV.Н '. Будьте попередив, що будь-який ваш код, який містить цей заголовок може бути спираючись на буде ймовірно, брейк і недокументованих поведінка в майбутньому версії MFC.

У тих рідкісних випадках необхідності обробляти одне з цих повідомлень ви повинні використовувати ON_MESSAGE повідомлення карта макрос і обробляти повідомлення у загальний формат LRESULT, WPARAM, LPARAM.

WM_QUERYAFXWNDPROC

Це повідомлення надсилається до вікна, що створюється. Це дуже рано у процесі створення надсилаються як метод визначення, якщо на WndProc є AfxWndProc. AfxWndProc повертає 1.

wParam Не використовується
lParam Не використовується
повертає 1 Якщо оброблено AfxWndProc

WM_SIZEPARENT

Це повідомлення надсилається на вікно кадр його негайного дітей під час зміни розміру (дзвінкиCFrameWnd::OnSize CFrameWnd::RecalcLayout , який називає CWnd::RepositionBars) щоб змінити розташування регулятор тактів навколо стороні кадру. AFX_SIZEPARENTPARAMS структура містить поточні доступні клієнт прямокутник батьків і HDWP (яка може бути NULL) з яких можна назвати DeferWindowPos , звести до мінімуму, фарбування.

wParam Не використовується
lParam Адреса AFX_SIZEPARENTPARAMS структури
повертає Не використовувати (0)

Ігноруючи повідомлення вказує, що вікно не брати участь у макеті.

WM_SETMESSAGESTRING

Це повідомлення надсилається до рамки вікна запитати його, щоб оновити рядок повідомлення в рядку стану. Рядок Посвідчення "або" на LPCSTR можуть бути визначені (але не обидва).

wParam Рядок Посвідчення (або нуль)
lParam LPCSTR рядок (або NULL)
повертає Не використовувати (0)

WM_IDLEUPDATECMDUI

Це повідомлення надсилається у полі час простоювання здійснити оновлення час простою команда update UI обробників. Якщо вікно (зазвичай контроль бар) обробляє повідомлення, це створює CCmdUI об'єкт (або об'єкт класу, похідні) і назвати CCmdUI::DoUpdate для кожного "об'єкти" у вікні. Це, у свою чергу, перевірити для обробника ON_UPDATE_COMMAND_UI для об'єктів в ланцюжку команда обробника.

wParam BOOL bDisableIfNoHandler
lParam Не використовувати (0)
повертає Не використовувати (0)

bDisableIfNoHandler не дорівнює нулю відключити інтерфейсу користувача об'єкта, якщо існує ні в ON_UPDATE_COMMAND_UI , ні обробника ON_COMMAND.

WM_EXITHELPMODE

Це повідомлення Опубліковано на CFrameWnd , щоб вийти з контексту режим довідки. Отримання повідомлення завершується модальних циклу робіт по CFrameWnd::OnContextHelp.

wParam Не використовувати (0)
lParam Не використовувати (0)
повертає Не використовується

WM_INITIALUPDATE

Цей надсилання повідомлення на шаблон документа для всіх нащадків рамка вікна це безпечно для них, щоб зробити їх початкового оновлення. Карти на заклик до CView::OnInitialUpdate , але можна використовувати в інших CWnd-отриманих класи для інших варто оновлення.

wParam Не використовувати (0)
lParam Не використовувати (0)
повертає Не використовувати (0)

WM_RECALCPARENT

Цей надсилається повідомлення за подання його батько вікна (отримана через GetParent) змусити макет переобчислення (як правило, батько буде назвати RecalcLayout). Це використовується в додатках OLE-сервер де це необхідно для кадру, щоб рости в розмір, як на перегляд загальний розмір зростає.

Якщо батьківський вікно обробляє це повідомлення слід повернути TRUE і заповнити RECT, прийнятий у lParam із новим розміром області клієнта. Це використовується в CScrollView належним чином обробляти смуги прокрутки (місці, то на за межами вікна, коли вони додаються) коли об'єкт сервера є на місці Активоване.

wParam Не використовувати (0)
lParam LPRECT rectClient, може бути NULL
повертає Правда, якщо новий клієнт прямокутник повернувся, FALSE в іншому випадку

WM_SIZECHILD

Це повідомлення надсилається на COleResizeBar її власника вікна (через GetOwner) коли користувач змінює розмір межу з маркерами зміни розміру. COleIPFrameWnd , що реагує на це повідомлення, намагаючись змінити розташування рамки вікна, як користувач надіслав.

Нові прямокутник, надана у клієнта координати по відношенню до кадру вікно, яке містить межу, знаходиться вказав на lParam.

wParam Не використовувати (0)
lParam LPRECT rectNew
повертає Не використовувати (0)

WM_DISABLEMODAL

Це повідомлення надсилається до блокування спливаючих вікон, які належать кадр вікно, яке це бути деактивовано. Рамка вікна використовується результат, щоб визначити, чи слід відключити спливаюче вікно.

Можна використовувати для виконання спеціальної обробки у спливаючому вікні, коли кадр вводить модальних держави або зберегти певні спливаючі вікна від отримання вимкнуто. Підказки за допомогою цього повідомлення знищити себе, коли рамка вікна йде в модальне держави, наприклад.

wParam Не використовувати (0)
lParam Не використовувати (0)
повертає Non нуль не відключити вікна, 0 вказує вікна буде вимкнуто

WM_FLOATSTATUS

Це повідомлення надсилається до блокування спливаючих вікон, які належать рамки вікна, коли кадру або активувати або деактивувати інше вікно кадр верхнього рівня. Це використовується у здійсненні MFS_SYNCACTIVE в CMiniFrameWnd, синхронізувати активації ці спливаючі вікна з активацією вікно верхнього рівня кадру.

wParam Це одне з таких значень:
FS_SHOW
FS_HIDE
FS_ACTIVATE
FS_DEACTIVATE
FS_ENABLE
FS_DISABLE
FS_SYNCACTIVE
lParam Не використовувати (0)

Значення, що повертається, має бути не нуль, якщо FS_SYNCACTIVE є набір і синхронізація області вікна з її активації з батьківського кадру. CMiniFrameWnd повертає не нуль, коли стиль MFS_SYNCACTIVE.

Докладніше перегляньте здійснення CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Це повідомлення надсилається вікно верхнього рівня коли вікно "верхнього рівня групи" є або активована, або деактивовано. Вікно є частиною групи найвищого рівня, якщо це вікно верхнього рівня, (немає батьків або власника), або він належить таких вікна. Це повідомлення схоже, використовується на WM_ACTIVATEAPP, але працює в ситуаціях, де windows, що належать до різних процесів змішуються в одному вікні ієрархії (загальноприйнята в додатків OLE).

WM_QUERY3DCONTROLS

Це повідомлення надсилається під час створення вікна для визначення, якщо вікно повинні subclassed на CTL3D32.DLL. 3D контролем за промовчанням увімкнуто для CControlBar, CDialog, CPropertySheet і CFormView.

wParam Не використовувати (0)
lParam Не використовувати (0)
повертає &Non нуля до підкласу з CTL3D.nbsp; Значення, що повертається використовується для виклику Ctl3dSubclassDlgEx.

WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE

Ці повідомлення використовуються у здійсненні відображення контекстної довідки. Будь ласка, зверніться до технічної Примітці 28 для отримання додаткової інформації.

MFC приватного ресурс формати

Існує в даний час тільки один MFC приватних ресурсів формат визначений, RT_DLGINIT.

Формат RT_DLGINIT ресурс

Один MFC приватних ресурсів формат використовується для зберігання додаткових діалоговому ініціалізації інформації. Це включає в себе початкові рядків, збережених у полі зі списком. Формат цього ресурсу не призначений для бути змінено, але обробляється Visual c + +.

Visual c + + і цей ресурс RT_DLGINIT не повинні використовувати схожі особливостей MFC, оскільки існують API замість інформація в ресурсі. За допомогою Visual c + + робить її набагато легше, щоб написати, підтримувати і перевести заявку в довгостроковій перспективі.

Базова структура RT_DLGINIT ресурс виглядає наступним чином:

+---------------+nbsp;                   \
| Керування ID |   UI&NT |
+---------------+                    |
| Повідомлення # |   UINT |
+---------------+                    |
|Length даних |   DWORD |
+---------------+                    | Повторюється
|   Дані |   Змінна довжина |   для кожного елемента керування
|     ...      |   та ще формат |   та ще повідомлення
+---------------+                    /
|     0         |   БАЙТ
+---------------+

Неодноразові розділ містить ID елемента керування, щоб надіслати повідомлення, повідомлення # надіслати (нормальний повідомлення Windows) і змінною довжиною даних. Windows повідомлення надсилається у формі:

SendDlgItemMessage (lt;Керування ID >, < повідомлення #, > 0 & <Data>)

Це дуже загальний формат, що дозволяє будь-яких повідомлень Windows і даних вмісту. Редактор ресурсів Visual c + + і MFC підтримують лише обмежена підмножина Windows повідомлень: CB_ADDSTRING, на початковий список варіантів для поля зі списком (дані — текстовий рядок).

Технічні примітки за номером |nbsp; Технічні примітки за категоріями

Index