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::RecalcLayoutCWnd::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 для начальных вариантов списка для полей со списком (данные — текстовая строка).

См. также

Технические примечания по номеру
Технические примечания по категории