2012-02-23 2 views
0

Я новичок на win32-платформе, и есть какой-то вопрос оО GetMessage (..) в win32

BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax) ; 

Я не знаю, что это делает wMsgFilterMin и wMsgFilterMax средства? Спасибо .....

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v=vs.85).aspx –

+0

@Ed Guiness: спасибо за помощь. Не могли бы вы дать мне простой образец ? –

ответ

2

Во-первых, имейте в виду, что GetMessage() возвращает только опубликованные сообщения. Их не так много, мышь и клавиатуры, WM_INPUT, WM_TIMER, WM_PAINT, WM_QUIT. Плюс к тому, что ваш собственный код поставляет, вызывая сообщения PostMessage(), WM_USER +.

Использование фильтра довольно необычно, вы обычно проходите 0 и 0, поэтому ничего не фильтруется. Вы можете рассмотреть возможность передачи WM_PAINT, чтобы очистить все запрошенные запросы краски. Я не могу придумать никаких оснований для фильтрации сообщений мыши или клавиатуры. Но определенный прецедент - это ваши собственные сообщения. Обычно используется для доставки уведомлений от рабочего потока к потоку пользовательского интерфейса, например. Возможно, вам захочется отфильтровать их, чтобы они обрабатывались до любого из обычных сообщений.

Просто положите это в задний карман. У вас может быть какое-то время для этого.

+0

Спасибо за помощь ... –

0

диапазон от wMsgFilterMin до wMsgFilterMax фильтр.

номер сообщения: WM_XX, например. Будет возвращен WM_CREATE (0x0001), WN_PAINT (0x000f), диапазон от 0x0001 до 0x000f.

Если вам нужен только один вид сообщения, тогда make wMsgFilterMin равен wMsgFilterMax.

Если нет фильтрации (возврат всех типов сообщений), а затем поместить оба wMsgFilterMin и wMsgFilterMax 0.

+0

да, но можете ли вы отфильтровать диапазон от WM_CREATE до WM_PAINT? т. е. его ранг является регулярным? если min - Key_first, а max - key_last? как я могу узнать содержание диапазона. –

+0

@Tu_JianWu Фильтр включает в себя все сообщения от min до max –

+0

@David Heffernan, спасибо за помощь ... Ммм, если я хочу отфильтровать два сообщения, но они разделены, как я могу сделай это ? И я думаю, что есть еще один способ отфильтровать сообщение. Он помещает код в функцию следующим образом: while (GetMessage (& msg, NULL, 0, 0)) {if (msg.message == XXX) .... } может ли он работать? и тогда в чем разница? –

Смежные вопросы