[vc-mfc编程实例]03

[vc-mfc编程实例]03

ID:26583278

大小:73.50 KB

页数:15页

时间:2018-11-27

[vc-mfc编程实例]03_第1页
[vc-mfc编程实例]03_第2页
[vc-mfc编程实例]03_第3页
[vc-mfc编程实例]03_第4页
[vc-mfc编程实例]03_第5页
资源描述:

《[vc-mfc编程实例]03》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、本文由sha_shoushou贡献pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。下载下载第3章消息处理第1章讨论了MFC用户界面的基本要素:窗口,窗口类和CWnd;第2章讨论了构成MFC库的其他类,尤其是那些构成MFC应用程序内核的类.在本章中,我们将讨论MFC类和它们的窗口怎样进行互相通信的.我们发现有三种类型的消息:窗口,命令(Command)和控件通知(ControlNotification),并且这些消息既可以发送(sent),也可以寄送(post);接着,将跟踪一个被MFC

2、窗口进程处理的消息;最后,将讨论重定向消息的方法.3.1发送或寄送一个消息第1章已提及,每个窗口使用窗口进程处理发送给它的消息.消息可以来自系统,你的应用程序或别的应用程序.消息告诉窗口进程执行某个任务(如初始化自己,绘制或销毁一个窗口等),或者通知它发生某个事件(如鼠标正单击窗口).系统或应用程序有两种传输消息的方法:发送消息或寄送消息.3.1.1发送一个消息发送一个消息时,直接调用窗口的窗口进程.通信是即时的,直到窗口进程为调用函数返回一个结果后,应用程序才能继续.3.1.2寄送一个消息寄送一个消息时,把消息发送到拥

3、有那个窗口的应用程序消息队列中.一有空闲,应用程序就搜索消息队列,并在消息队列中处理消息,即从队列中删除它们,并将它们发送到即定窗口.通信将可能延迟,直到目标应用程序获得处理消息的时间.调用函数发送消息后即返回,但结果只是表示消息寄送成功与否,而不是被调用窗口进程的结果(见图3-1).窗口对象WndProc地址①被发送的消息直接调用该窗口的窗口进程消息泵消息n+1消息n+2消息n+3消息n+4消息队列③当应用程序空闲时,抽出寄送到队列中的消息并调用该窗口的窗口进程②被寄送的消息延迟在应用程序消息队列中图3-1发送消息时通

4、信是即时的,而寄送消息时通信可能延迟3.1.3发送一个消息与寄送一个消息的比较鼠标和键盘消息通常是寄送的,而所有其他消息通常都是发送的.在消息队列中,寄送下载有鼠标和键盘消息被处理之后.第3章消息处理33的消息接受特殊的鼠标和键盘处理.通常,应该尽量发送一个消息,除非想把动作延迟到所3.2怎样使用MFC发送一个消息用MFC发送一个消息的方法是,首先,应获取接收消息的CWnd类对象的指针;然后,调用CWnd的成员函数SendMessage().LRESULTRes=pWnd->SendMessage(UINTMsg,WPA

5、RAMwParam,LPARAMlParam);pWnd指针指向目标CWnd类对象.变量Msg是消息,wParam和lParam变量包含消息的参数,如鼠标单击哪里或选择了什么菜单项.目标窗口返回的消息结果放在变量Res中.发送消息到一个没有CWnd类对象的窗口,可以用下列目标窗口的句柄直接调用WindowsAPI:LRESULTRes=::SendMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam);这里的hWnd是目标窗口的句柄.3.3怎样用MFC寄送一个消息用MFC寄

6、送一个消息与发送一个消息几乎相同,但寄送时用PostMessage(),而不是用SendMessage();返回值Res也不一样,Res不是一个由目标窗口返回的值,而是一个布尔值,用来表示消息是否成功地放到消息队列中.检索一个寄送消息正常情况下,一旦消息被寄送后,应用程序在后台发送它.但是在特殊情况下,需要你自己去删除一个消息,例如想在应用程序接收到某种消息之前停止应用程序.有两种方法可以从应用程序消息队列中删除一个消息,但这两种方法都没有涉及MFC.■第一种方法:在不干扰任何事情之下窥视消息队列,看看一个消息是否在那里

7、.BOOLres=::PeekMessage(LPMSGlpMsg,HWNDhWnd,UINTwMsFilterMin,UINTwMsgFilterMax,UINTwRemoveMsg);■第二种方法:实际上是等待,一直等到一个新的消息到达队列为止,然后删除并返回该消息.BOOLres=::GetMessage(LPMSGlpMsg,HWNDhWnd,UINTwMsgFilterMin,UINTwMsgFilterMax);在这两种方法中,变量hWnd指定要截获消息的窗口,如果该变量设为NULL,所有窗口消息将被截获.w

8、MsgFilterMin和wMsgFilterMax变量与SendMessage()中的变量Msg相对应,指定查看消息的范围.如果用"0,0",则所有的消息都将被截获.如果用WM_KEYFIRST,WM_KEYLAST或WM_MOUSEFIRST,WM_MOUSELAST,则所有键盘或鼠标的消息将被截获.wRemov

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。