Я новичок на win32-платформе, и есть какой-то вопрос оО GetMessage (..) в win32
BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax) ;
Я не знаю, что это делает wMsgFilterMin
и wMsgFilterMax
средства? Спасибо .....
Я новичок на win32-платформе, и есть какой-то вопрос оО GetMessage (..) в win32
BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax) ;
Я не знаю, что это делает wMsgFilterMin
и wMsgFilterMax
средства? Спасибо .....
Во-первых, имейте в виду, что GetMessage() возвращает только опубликованные сообщения. Их не так много, мышь и клавиатуры, WM_INPUT, WM_TIMER, WM_PAINT, WM_QUIT. Плюс к тому, что ваш собственный код поставляет, вызывая сообщения PostMessage(), WM_USER +.
Использование фильтра довольно необычно, вы обычно проходите 0 и 0, поэтому ничего не фильтруется. Вы можете рассмотреть возможность передачи WM_PAINT, чтобы очистить все запрошенные запросы краски. Я не могу придумать никаких оснований для фильтрации сообщений мыши или клавиатуры. Но определенный прецедент - это ваши собственные сообщения. Обычно используется для доставки уведомлений от рабочего потока к потоку пользовательского интерфейса, например. Возможно, вам захочется отфильтровать их, чтобы они обрабатывались до любого из обычных сообщений.
Просто положите это в задний карман. У вас может быть какое-то время для этого.
Спасибо за помощь ... –
диапазон от wMsgFilterMin до wMsgFilterMax фильтр.
номер сообщения: WM_XX, например. Будет возвращен WM_CREATE (0x0001), WN_PAINT (0x000f), диапазон от 0x0001 до 0x000f.
Если вам нужен только один вид сообщения, тогда make wMsgFilterMin равен wMsgFilterMax.
Если нет фильтрации (возврат всех типов сообщений), а затем поместить оба wMsgFilterMin и wMsgFilterMax 0.
да, но можете ли вы отфильтровать диапазон от WM_CREATE до WM_PAINT? т. е. его ранг является регулярным? если min - Key_first, а max - key_last? как я могу узнать содержание диапазона. –
@Tu_JianWu Фильтр включает в себя все сообщения от min до max –
@David Heffernan, спасибо за помощь ... Ммм, если я хочу отфильтровать два сообщения, но они разделены, как я могу сделай это ? И я думаю, что есть еще один способ отфильтровать сообщение. Он помещает код в функцию следующим образом: while (GetMessage (& msg, NULL, 0, 0)) {if (msg.message == XXX) .... } может ли он работать? и тогда в чем разница? –
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v=vs.85).aspx –
@Ed Guiness: спасибо за помощь. Не могли бы вы дать мне простой образец ? –