网站大量收购闲置独家精品文档,联系QQ:2885784924

VC++课件第2章Windows消息机制.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大学Visual C++程序设计案例教程 杨琦 计算机教学实验中心 西安交通大学 授 课 内 容 2.1 事件驱动与消息循环机制 2.2 编制消息处理函数 2.3 鼠标消息 2.4 键盘消息 2.5 定时器消息 2.1 事件驱动与消息循环机制 所有的Windows应用程序都是消息驱动的; 消息处理是windows应用程序的核心; 消息就是操作系统通知应用程序某件事情已经发生的一种方式; 当用户键入、移动鼠标或双击鼠标,或者用户改变窗口的大小,都将向适当的窗口发送消息 一个窗口可以向另一个窗口发送消息,并且大多数窗口通过向其他窗口发送一个稍有不向的消息来响应消息。 与所有的Windows应用程序一样,MFC应用程序也要处理消息 创建消息循环 应用程序主窗口显示之后,WinMain函数就开始它的主要职责,即处理消息。 Windows并不是把键盘和鼠标器等的输入直接送给应用程序,而是把所有输入放到应用程序队列中去。应用程序队列还接收包括来自Windows和其他应用程序的消息。 应用程序的 WinMain函数通过执行一段代码从应用程序队列中检索输入消息,并把它们分配给相应的窗口函数,以便处理它们。这段代码实际上是一段循环代码,称为“消息循环”,如下所示: 创建消息循环 MSG msg;//消息 …… while (GetMessage(&msg, //消息结构 NULL, //接收消息句柄 0, //最低消息 0)) //最高消息 { TranslateMessage(&msg); //翻译消息 DispatchMessage(&msg); //传输消息 } return msg.wParam; 消息队列 这几条语句组成主消息循环,是Windows应用程序的关键所在。Windows为每一个正在运行的应用程序保持一个消息队列。 当任一键或鼠标按钮被按下时,Windows将输入的事件翻译成一个消息,并将此消息放在该程序的消息队列中去。 应用程序从消息循环接受消息。Windows程序大量引用Windows函数,目前Windows函数有600多种,大大方便了用户。 MSG的结构在windows.h中定义: typedef struct tagMSG { HWND hwnd; //接收消息的窗口 WORD message; //消息号 WORD wParam; //消息的附加信息 //确切含义取决于消息号 LONG lParam; //消息的另一附加信息 //确切含义取决于消息号 DWORD time; //消息被传送的时间 POINT pt; //消息被发送时光标的位置 //POINT结构有X、Y两个域 }MSG; MSG的结构 MSG结构的域由GetMessage函数根据消息队列中的下一条消息来填充。 当消息队列中没有消息(或只有WM_PAINT和WM_TIMER消息)时,GetMessage在这期间可以将控制权交给其他应用程序。 只有当获取的消息是WM_QUIT 时,GetMessage 才返回FALSE,结束消息循环,从而终止应用程序。 消息的分类 根据消息来源的不同 输入消息 控制消息 系统消息 用户消息 2.2 编制消息处理函数 所谓消息映射,就是让程序员指定要某个有消息处理能力的MFC类处理某个消息,通过消息映射,消息和它的处理函数才能对应起来。 当用户在窗口中单击鼠标左键时,Windows系统就会自动发送WM_LBUTTONDOWN消息给该窗口,如果程序需要对此消息有所反应的话,则程序中应包含类似的函数: 消息映射 在类头文件中也必须包含相应的函数原型说明: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg标识符表明该原型说明的是消息映射函数。 在代码文件中还需要消息映射宏,将OnLButtonDown函数与应用程序框架联系在一起: BEGIN_MESSAGE_MAP(CMyFirstView, CView) //{{AFX_MSG_MAP(CMyFirstView) ON_WM_LBUTTOND

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档