LRESULT SendMessage(
HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); SendMessage发送消息并等待消息得理结果,再返回本消息被某线程处理后的值
BOOL PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
); PostMessage是将消息放入消息队列后立即返回 而不管这个消息被处理
BOOL GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
);
GetMessage从消息队列取一个消息。放入lpMsg中,如果消息队列为空,则一直等待。直到有消息为止.
BOOL PeekMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax,
UINT wRemoveMsg
);
PeekMessage查看下消息队列,如有消息则将消息从消息队列中“放入”或"拷贝"到lpMsg中, 如果没有消息则函数立即返回. wRemoveMsg标志指示,是否从队列中删除掉这条被拿出的消息。 如果wRemoveMsg是 PM_REMOVE 则peekmessage将消息"放入"lpMsg 这时消息队列中没有了此消息 如果wRemoveMsg是PM_NOREMOVE 则peekmessage将消息"拷贝"一份放入lpMsg 消息仍在消息队列中
所谓"处理消息"指后面跟上 TranslateMessage(&msg); DispatchMessage(&msg); 将消息转发给wndproc(); 或是你自已switch(msg)后进行case操作.
GetMessage你可以认为它是将消息从消息队列中删除了的。(特殊消息WM_PAINT除外)
所以GetMessage后面你要么处理消息,要么转发消息.否则消息就会丢失。
|