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 на них отсюда: идентификаторы сообщений в отраженном окне.