首页 > Windows开发 > 详细

Windows消息机制驱动的客户端程序GetMssage()

时间:2015-07-23 16:00:12      阅读:160      评论:0      收藏:0      [点我收藏+]

要从消息队列中取出消息,我们需要调用GetMessage()函数,该函数的原型声明如下:

BOOL GetMessage(

          LPMSG lpMsg,              // address of structure with message

          HWND hWnd,                 // handle of window

          UINT wMsgFilterMin,       // first message

          UINT wMsgFilterMax        // last message

);

参数lpMsg指向一个消息(MSG)结构体,GetMessage从线程的消息队列中取出的消息信息将保存在该结构体对象中。

参数hWnd指定接收属于哪一个窗口的消息。通常我们将其设置为NULL,用于接收属于调用线程的所有窗口的窗口消息。

参数wMsgFilterMin指定要获取的消息的最小值,通常设置为0

参数wMsgFilterMax指定要获取的消息的最大值。如果wMsgFilterMinwMsgFilter Max都设置为0,则接收所有消息。

GetMessage函数接收到除WM_QUIT外的消息均返回非零值。对于WM_QUIT消息,该函数返回零。如果出现了错误,该函数返回-1,例如,当参数hWnd是无效的窗口句柄或lpMsg是无效的指针时。

二、消息选择模型

Windows消息机制编写socket客户端程序的方法。使用Windows消息机制编写socket程序主要有以下的好处:一是我们可以将大部分的recv操作以及close操作放到消息处理函数里面,以利于代码的维护;二是当有数据可读的时候,本地程序会接到相应的消息,我们可以在这时候读取数据。


这是一种winsock下的网络模型
例如: int iErrorCode=WSAAsyncSelect(mySocket.m_clientSocket,m_hWnd,WM_CLIENT_READ,FD_READ | FD_CLOSE);
这样一句代码,它告诉系统,现在我这个mySocket.m_clientSocket,只关注FD_READ | FD_CLOSE两个网络事件,一旦有这两个事件,我就会投递一个WM_CLIENT_READ的消息,这是一个自定义的消息
然后再到消息循环中对这个消息进行响应就好了

Windows消息机制驱动的客户端程序GetMssage()

原文:http://my.oschina.net/u/727148/blog/482781

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!