- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[VC-MFC编程实例].03
[VC-MFC编程实例].03
本文由sha_shoushou贡献
pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
下载
下载
第3章 消 息 处 理
第1章讨论了 M F C用户界面的基本要素:窗口,窗口类和 C W n d;第2章讨论了构成 M F C 库的其他类,尤其是那些构成 M F C应用程序内核的类.在本章中,我们将讨论 M F C类和它们 的窗口怎样进行互相通信的.我们发现有三种类型的消息:窗口,命令 ( C o m m a n d )和控件通 知(Control Notification),并且这些消息既可以发送 ( s e n t ),也可以寄送 ( p o s t );接着,将跟踪 一个被MFC窗口进程处理的消息;最后,将讨论重定向消息的方法.
3.1 发送或寄送一个消息
第1章已提及,每个窗口使用窗口进程处理发送给它的消息.消息可以来自系统,你的应 用程序或别的应用程序.消息告诉窗口进程执行某个任务 (如初始化自己,绘制或销毁一个窗 口等),或者通知它发生某个事件 (如鼠标正单击窗口 ). 系统或应用程序有两种传输消息的方法:发送消息或寄送消息. 3.1.1 发送一个消息 发送一个消息时,直接调用窗口的窗口进程.通信是即时的,直到窗口进程为调用函数 返回一个结果后,应用程序才能继续. 3.1.2 寄送一个消息 寄送一个消息时,把消息发送到拥有那个窗口的应用程序消息队列中.一有空闲,应用 程序就搜索消息队列,并在消息队列中处理消息,即从队列中删除它们,并将它们发送到即 定窗口.通信将可能延迟,直到目标应用程序获得处理消息的时间.调用函数发送消息后即 返回,但结果只是表示消息寄送成功与否,而不是被调用窗口进程的结果 (见图3-1).
窗口对象 WndProc 地址 ①被发送的消息直接 调用该窗口的窗口 进程 消息泵 消息n+1 消息n+2 消息n+3 消息n+4 消息队列 ③当应用程序空闲时, 抽出寄送到队列中 的消息并调用该窗 口的窗口进程
②被寄送的消息延迟在 应用程序消息队列中
图3-1 发送消息时通信是即时的,而寄送消息时通信可能延迟
3.1.3 发送一个消息与寄送一个消息的比较 鼠标和键盘消息通常是寄送的,而所有其他消息通常都是发送的.在消息队列中,寄送
下载
有鼠标和键盘消息被处理之后.
第3章 消 息 处 理
33
的消息接受特殊的鼠标和键盘处理.通常,应该尽量发送一个消息,除非想把动作延迟到所
3.2 怎样使用MFC发送一个消息
用MFC发送一个消息的方法是,首先,应获取接收消息的 CWnd类对象的指针;然后,调 用CWnd的成员函数 SendMessage( ).
LRESULT Res=pWnd-SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam);
p W n d指针指向目标 C W n d类对象.变量 M s g是消息, w P a r a m和l P a r a m变量包含消息的参 数,如鼠标单击哪里或选择了什么菜单项.目标窗口返回的消息结果放在变量 R e s中.发送消 息到一个没有CWnd类对象的窗口,可以用下列目标窗口的句柄直接调用 Windows API:
LRESULT Res=::SendMessage(HWND hWnd , UINT Msg , WPARAM wParam , LPARAM lParam);
这里的hWnd是目标窗口的句柄.
3.3 怎样用MFC寄送一个消息
用M F C寄送一个消息与发送一个消息几乎相同,但寄送时用 PostMessage( ) ,而不是用 SendMessage( );返回值 R e s也不一样, R e s不是一个由目标窗口返回的值,而是一个布尔值, 用来表示消息是否成功地放到消息队列中. 检索一个寄送消息 正常情况下,一旦消息被寄送后,应用程序在后台发送它.但是在特殊情况下,需要你 自己去删除一个消息,例如想在应用程序接收到某种消息之前停止应用程序.有两种方法可 以从应用程序消息队列中删除一个消息,但这两种方法都没有涉及 MFC.
■
第一种方法:在不干扰任何事情之下窥视消息队列,看看一个消息是否在那里.
BOOL res=::PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg); ■
第二种方
您可能关注的文档
最近下载
- 2025年护理人员N1进阶N2考试试题及答案 .pdf VIP
- DB21T1342-2021 建筑工程文件编制归档规程.pdf
- Unit-1-Discovering-Useful-Structures-超好用的公开课获奖课件-(.pptx VIP
- 专业技术职务任职资格评审表.doc VIP
- 医疗操作规程.docx VIP
- 湖北省专业技术职务任职资格评审表.docx
- 钒酸铋光催化剂的制备及改性.pdf VIP
- 城市轨道交通列车牵引与制动系统(配实训工单) 实训手册(带答案).docx VIP
- 吊装施工专业技术方案(含计算).doc VIP
- 城市轨道交通车辆维护与检修中职全套完整教学课件.pptx
文档评论(0)