WM_REFLECT_NOTIFY против WM_NOTIFY

Документацию для WM_NOTIFY достаточно легко найти, однако я нахожу довольно много примеров кода и статей, которые ссылаются на WM_REFLECT_NOTIFY, для которого я не могу найти какую-либо документацию.

Что такое WM_REFLECT_NOTIFYГде я могу найти документацию для него и чем это сообщение отличается от WM_NOTIFY?

Пример ссылки:

1 ответ

Решение

WM_REFLECT_NOTIFY упоминается как имеющий значение 0x204E, то есть 0x2000 + WM_NOTIFY, Типичное использование отражения сообщения состоит в том, чтобы отправить уведомление обратно его источнику, чтобы предположительно подклассовый элемент управления мог обрабатывать само уведомление.

Следовательно, знание, которое вы, возможно, упускаете и ищете документацию, заключается в том, что элемент управления отправляет WM_NOTIFY его родителю в обычном порядке. И родитель делает SendMessage с теми же параметрами сообщения обратно к элементу управления, используя номер сообщения 0x2000 + оригинал Msg, Значение параметров wParam, lParam должен быть таким же, как и в оригинальном сообщении (WM_NOTIFY в твоем случае).

Постоянная 0x2000 может варьироваться от фреймворка к фреймворку или быть частным соглашением между элементами управления и окнами хостинга.

Элементы управления MFC и ActiveX, например, отражают WM_NOTIFY сообщения, делающие их OCM_NOTIFY сообщения, где (olectl.h):

#define OCM_NOTIFY            (OCM__BASE + WM_NOTIFY)
#define OCM__BASE           (WM_USER+0x1c00)

и наконец (winuser.h):

#define WM_USER                         0x0400

Это OCM_NOTIFY является 0x204Eтак же, как ваш WM_REFLECT_NOTIFY, Документы MSDN на них отсюда: идентификаторы сообщений в отраженном окне.

Другие вопросы по тегам