TN024. Сообщения и ресурсы, определенные MFC
Примечание.
Следующее техническое примечание не было обновлено, поскольку сначала оно было включено в электронную документацию. В результате некоторые процедуры и разделы могут быть устаревшими или неверными. Для получения последних сведений рекомендуется выполнить поиск интересующей темы в алфавитном указателе документации в Интернете.
В этой заметке описываются внутренние сообщения и форматы ресурсов Windows, используемые MFC. Эта информация объясняет реализацию платформы и поможет вам выполнить отладку приложения. Для приключений, несмотря на то, что все эти сведения официально не поддерживаются, вы можете использовать некоторые из этих сведений для расширенных реализаций.
Эта заметка содержит сведения о частной реализации MFC; все содержимое подлежит изменению в будущем. Частные сообщения Windows MFC имеют значение только в область одного приложения, но будут изменены в будущем, чтобы содержать системные сообщения.
Диапазон частных сообщений Windows и типов ресурсов MFC находятся в зарезервированном диапазоне "системных" диапазонов, отложенных Microsoft Windows. В настоящее время не все числа в диапазонах используются и, в будущем, новые числа в диапазоне могут использоваться. В настоящее время используемые номера могут быть изменены.
Частные сообщения Windows MFC находятся в диапазоне 0x360-0x37F>.
Типы частных ресурсов MFC находятся в диапазоне 0xF0-0xFF>.
Частные сообщения Windows MFC
Эти сообщения Windows используются вместо виртуальных функций C++, где относительно свободное связывание требуется между объектами окна и где виртуальная функция C++ не подходит.
Эти частные сообщения Windows и связанные структуры параметров объявляются в закрытом заголовке MFC AFXPRIV. H'. Обратите предупреждение о том, что любой код, включающий этот заголовок, может полагаться на недокументированное поведение и, скорее всего, разорвится в будущих версиях MFC.
В редких случаях, когда требуется обработать одно из этих сообщений, следует использовать макрос карты сообщений ON_MESSAGE и обрабатывать сообщение в универсальном формате LRESULT/WPARAM/LPARAM.
WM_QUERYAFXWNDPROC
Это сообщение отправляется в созданное окно. Это отправляется очень рано в процессе создания в качестве метода определения того, является ли WndProc AfxWndProc. AfxWndProc возвращает значение 1.
Параметры и возвращаемое значение | Description |
---|---|
wParam | Не используется |
lParam | Не используется |
returns | 1, если обрабатывается AfxWndProc |
WM_SIZEPARENT
Это сообщение отправляется окном фрейма своим непосредственным дочерним элементам во время изменения размера (CFrameWnd::OnSize
вызывается CFrameWnd::RecalcLayout
CWnd::RepositionBars
), чтобы изменить положение панели управления вокруг стороны кадра. Структура AFX_SIZEPARENTPARAMS содержит текущий доступный клиентский прямоугольник родительского элемента и HDWP (который может иметь значение NULL), с помощью которого можно свести к DeferWindowPos
минимуму повторение.
Параметры и возвращаемое значение | Description |
---|---|
wParam | Не используется |
lParam | Адрес структуры AFX_SIZEPARENTPARAMS |
returns | Не используется (0) |
Игнорируя сообщение, означает, что окно не участвует в макете.
WM_SETMESSAGESTRING
Это сообщение отправляется в окно кадра, чтобы попросить его обновить строку сообщения в строке состояния. Можно указать идентификатор строки или LPCSTR (но не оба).
Параметры и возвращаемое значение | Description |
---|---|
wParam | Строковый идентификатор (или ноль) |
lParam | LPCSTR для строки (или NULL) |
returns | Не используется (0) |
WM_IDLEUPDATECMDUI
Это сообщение отправляется во время простоя, чтобы реализовать обновление бездействия обработчиков пользовательского интерфейса update-command. Если окно (обычно панель управления) обрабатывает сообщение, он создает CCmdUI
объект (или объект производного класса) и вызывает CCmdUI::DoUpdate
для каждого из элементов в окне. Это, в свою очередь, проверка для обработчика ON_UPDATE_COMMAND_UI для объектов в цепочке команд-обработчика.
Параметры и возвращаемое значение | Description |
---|---|
wParam | BOOL bDisableIfNoHandler |
lParam | Не используется (0) |
returns | Не используется (0) |
bDisableIfNoHandler не является ненулевой , чтобы отключить объект пользовательского интерфейса, если нет ни ON_UPDATE_COMMAND_UI, ни обработчика ON_COMMAND.
WM_EXITHELPMODE
Это сообщение публикуется в CFrameWnd
режиме справки с учетом контекста. Получение этого сообщения завершает модальный цикл, запущенный CFrameWnd::OnContextHelp
.
Параметр и возвращаемое значение | Description |
---|---|
wParam | Не используется (0) |
lParam | Не используется (0) |
returns | Не используется |
WM_INITIALUPDATE
Это сообщение отправляется шаблоном документа всем потомкам окна фрейма, когда оно безопасно для них для выполнения первоначального обновления. Он сопоставляется с вызовом CView::OnInitialUpdate
, но может использоваться в других CWnd
производных классах для другого однократного обновления.
Параметры и возвращаемое значение | Description |
---|---|
wParam | Не используется (0) |
lParam | Не используется (0) |
returns | Не используется (0) |
WM_RECALCPARENT
Это сообщение отправляется представлением в родительское окно (полученное через GetParent
) для принудительного пересчета макета (обычно родительский вызов RecalcLayout
). Это используется в приложениях OLE-сервера, где необходимо увеличить размер кадра по мере увеличения общего размера представления.
Если родительское окно обрабатывает это сообщение, оно должно возвращать значение TRUE и заполнять RECT, переданный в lParam, новым размером клиентской области. Это используется CScrollView
для правильной обработки полос прокрутки (место за пределами окна при добавлении) при активации на месте объекта сервера.
Параметры и возвращаемое значение | Description |
---|---|
wParam | Не используется (0) |
lParam | LPRECT rectClient может иметь значение NULL |
returns | ЗНАЧЕНИЕ TRUE, если возвращен новый прямоугольник клиента, значение FALSE в противном случае |
WM_SIZECHILD
Это сообщение отправляется COleResizeBar
в окно владельца (через GetOwner
) при изменении размера панели изменения размера с помощью дескрипторов изменения размера. COleIPFrameWnd
реагирует на это сообщение, пытаясь изменить положение окна кадра по мере запроса пользователя.
Новый прямоугольник, заданный в координатах клиента относительно окна кадра, содержащего полосу изменения размера, указывает на lParam.
Параметры и возвращаемое значение | Description |
---|---|
wParam | Не используется (0) |
lParam | LPRECT rectNew |
returns | Не используется (0) |
WM_DISABLEMODAL
Это сообщение отправляется во все всплывающие окна, принадлежащие окну кадра, которое деактивируется. Окно фрейма использует результат, чтобы определить, следует ли отключить всплывающее окно.
Это можно использовать для выполнения специальной обработки во всплывающем окне при вводе модального состояния кадра или для сохранения определенных всплывающих окон от отключения. Подсказки используют это сообщение, чтобы уничтожить себя, когда окно фрейма переходит в модальное состояние, например.
Параметры и возвращаемое значение | Description |
---|---|
wParam | Не используется (0) |
lParam | Не используется (0) |
returns | Ненулевое отключение окна, 0 указывает, что окно будет отключено. |
WM_FLOATSTATUS
Это сообщение отправляется во все всплывающие окна, принадлежащие окну кадра, когда кадр активируется или деактивируется другим окном фрейма верхнего уровня. Это используется реализацией MFS_SYNCACTIVE в CMiniFrameWnd
, чтобы сохранить активацию этих всплывающих окон в синхронизации с активацией окна кадра верхнего уровня.
Параметры | Description |
---|---|
wParam | Одно из следующих значений: FS_SHOW FS_HIDE FS_ACTIVATE FS_DEACTIVATE FS_ENABLEFS_DISABLE FS_SYNCACTIVE |
lParam | Не используется (0) |
Возвращаемое значение должно быть ненулевым, если задано FS_SYNCACTIVE, а окно синхронизирует активацию с родительским кадром. CMiniFrameWnd
возвращает ненулевое значение, если для стиля задано значение MFS_SYNCACTIVE.
Дополнительные сведения см. в реализации CMiniFrameWnd
.
WM_ACTIVATETOPLEVEL
Это сообщение отправляется в окно верхнего уровня, когда окно в его группе верхнего уровня активируется или деактивировано. Окно является частью группы верхнего уровня, если это окно верхнего уровня (без родительского или владельца), или оно принадлежит такому окну. Это сообщение аналогично WM_ACTIVATEAPP, но работает в ситуациях, когда окна, принадлежащие различным процессам, смешиваются в одной иерархии окон (обычно в приложениях OLE).
WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE
Эти сообщения используются в реализации контекстно-конфиденциальной справки. Дополнительные сведения см. в техническом примечание 28 .
Форматы частных ресурсов MFC
В настоящее время MFC определяет два формата частных ресурсов: RT_TOOLBAR и RT_DLGINIT.
формат ресурсов RT_TOOLBAR
Панель инструментов по умолчанию, предоставляемая AppWizard, основана на пользовательском ресурсе RT_TOOLBAR, который был представлен в MFC 4.0. Этот ресурс можно изменить с помощью редактора панели инструментов.
формат ресурсов RT_DLGINIT
Один формат частного ресурса MFC используется для хранения дополнительных сведений о инициализации диалогов. Сюда входят начальные строки, хранящиеся в поле со списком. Формат этого ресурса не предназначен для редактирования вручную, но обрабатывается Visual C++.
Visual C++ и этот ресурс RT_DLGINIT не требуются для использования связанных функций MFC, так как в ресурсе есть альтернатива API. Использование Visual C++ упрощает запись, обслуживание и перевод приложения в долгосрочной перспективе.
Базовая структура ресурса RT_DLGINIT выглядит следующим образом:
+---------------+ \
| Control ID | UINT |
+---------------+ |
| Message # | UINT |
+---------------+ |
|length of data | DWORD |
+---------------+ | Repeated
| Data | Variable Length | for each control
| ... | and Format | and message
+---------------+ /
| 0 | BYTE
+---------------+
Повторяющийся раздел содержит идентификатор элемента управления для отправки сообщения, сообщения # для отправки (обычное сообщение Windows) и переменной длины данных. Сообщение Windows отправляется в форме:
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
Это очень общий формат, разрешающий любые сообщения и содержимое данных Windows. Редактор ресурсов Visual C++ и MFC поддерживают только ограниченное подмножество сообщений Windows: CB_ADDSTRING для начальных вариантов списка для полей со списком (данные — текстовая строка).
См. также
Технические примечания по номеру
Технические примечания по категории