TN024: MFC определенные сообщения и ресурсы

Эта записка описывает внутренние сообщения Windows и ресурсов форматы, используемые в MFC. Эта информация объясняет осуществление рамок и будет оказывать Вам помощь в отладке приложения. Для приключений несмотря на то, что вся эта информация официально поддерживается, вы можете использовать некоторые из этих сведений для современных реализаций.

Эта записка содержит MFC частных деталей; все содержимое могут быть изменены в будущем. Частные сообщения Windows MFC имеют смысл в рамках одного приложения, но в будущем изменится на содержат системные сообщения.

Диапазон MFC частные сообщения Windows и типы ресурсов находятся в диапазоне зарезервированных «система» выделить на Microsoft Windows. В настоящее время не все числа в диапазонах используются и в будущем, могут использоваться новые номера в диапазоне. Используемые в настоящее время номера могут быть изменены.

Частные Windows MFC сообщения находятся в диапазоне 0x360-> 0x37F.

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

Сообщения Windows частный MFC

Эти сообщения Windows использовать вместо виртуальных функций C++ где требуется сравнительно слабая связь между объектов window и где виртуальной функции C++ не следует.

Эти частные сообщения Windows и связанных с ними параметров структуры объявляются в заголовке частных MFC ' AFXPRIV.H'. Помните, что любой из вашего кода, содержащего этот заголовок может полагаться на незарегистрированных поведение и воля вероятно перерыв в будущем версии MFC.

В редких случаях, о необходимости для обработки одного из этих сообщений следует использовать макрос карта сообщение ON_MESSAGE и обрабатывать сообщение в универсальном формате LRESULT/WPARAM/LPARAM.

WM_QUERYAFXWNDPROC

Это сообщение отправляется к окну, которое в настоящее время создается. Это число отправляется очень рано в процессе создания как метод определения Если WndProc AfxWndProc.Возвращает значение 1, AfxWndProc .

wParam Не используется
lParam Не используется
возвращает 1 Если обрабатываемые AfxWndProc

WM_SIZEPARENT

Это сообщение отправляется его непосредственные дочерние во время изменения размера (вызов CFrameWnd::RecalcLayout , который вызывает CWnd::RepositionBarsCFrameWnd::OnSize ) в фрейме окна для перемещения элемента управления полосы вокруг стороны на раме. Структура AFX_SIZEPARENTPARAMS содержит текущий прямоугольник доступных клиенту родителей и HDWP (которые могут быть NULL) с которой для вызова DeferWindowPos для сведения к минимуму перерисовки.

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

Игнорируя сообщение указывает, что окно не принимает участие в макете.

WM_SETMESSAGESTRING

Это сообщение отправляется в фрейме окна просить обновить строку сообщения в строке состояния. ID строки или LPCSTR могут быть указаны (но не оба).

wParam Строка ID (или ноль)
lParam LPCSTR для строки (или NULL)
возвращает Не используется (0)

WM_IDLEUPDATECMDUI

Это сообщение отправляется в время простоя для реализации времени простоя обновление пользовательского Интерфейса обработчиков команда update. Если окно (обычно панель управления) обрабатывает сообщение, он создает объект 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
возвращает Значение TRUE, если новый клиентский прямоугольник вернулся, FALSE в противном случае

WM_SIZECHILD

Это сообщение отправляется COleResizeBar в его окно-владелец (через GetOwner) когда пользователь изменяет размер панели изменения размера с маркеры изменения размера. COleIPFrameWnd отвечает на это сообщение, пытаясь изменить положение в фрейме окна, поскольку пользователь запросил.

Новый прямоугольник, в клиентские координаты относительно фрейма окна, который содержит изменения размера бар, указывает на lParam.

wParam Не используется (0)
lParam LPRECT rectNew
возвращает Не используется (0)

WM_DISABLEMODAL

Это сообщение отправляется всем всплывающие окна, принадлежащие фрейм окна, в которое время деактивации. В фрейме окна использует результат для определения ли отключить всплывающее окно.

Можно использовать для выполнения особой обработки в всплывающем окне, когда кадр входит в модальное состояние или сохранить некоторые всплывающие окна от получения инвалидами. Всплывающие подсказки используйте это сообщение чтобы уничтожить себя, когда в фрейме окна переходит в модальное состояние, например.

wParam Не используется (0)
lParam Не используется (0)
возвращает Ненулевое значение не отключить окно, 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 является набор и syncronizes окно активации с родительского фрейма. CMiniFrameWnd возвращает отличное от нуля, когда стиль имеет значение MFS_SYNCACTIVE.

Для получения дополнительной информации см. осуществление CMiniFrameWnd.

WM_ACTIVATETOPLEVEL

Это сообщение отправляется окна верхнего уровня при активации или деактивации окна в своей «Группа высшего уровня». Окно является частью группы высшего уровня, если это окно верхнего уровня (без родителя или владелец), или оно принадлежит в окне. Это сообщение используется подобен WM_ACTIVATEAPP, но работает в ситуациях, когда windows, принадлежащие к различным процессам смешиваются в иерархии "единого окна" (Общие в приложениях OLE).

WM_QUERY3DCONTROLS

Это сообщение отправляется во время создания окна для определения, если окно должно быть созданном как подкласс, CTL3D32.DLL. 3D элементов управления по умолчанию включена для CControlBar, CDialog, CPropertySheet и CFormView.

wParam Не используется (0)
lParam Не используется (0)
возвращает Ненулевое значение для подкласса с CTL3D.  Возвращаемое значение используется для вызова 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         |   БАЙТ
+---------------+

Неоднократные секция содержит Идентификатор элемента управления, чтобы отправить сообщение, сообщение # отправки (обычного сообщения Windows) и переменной длины данных. Windows сообщение отправляется в форме:

SendDlgItemMessage (lt;Идентификатор элемента управления >, < сообщение # > 0 и <Data>)

Это весьма общий формат, позволяя любого сообщения Windows и содержание данных. Редактор ресурсов Visual C++ и MFC поддерживают только ограниченное подмножество сообщений Windows: CB_ADDSTRING для первоначального выбора списка для поля со списком (данные — это текстовая строка).

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

Index