《面向对象程序设计》课件 (11).ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章键盘与鼠标 2.鼠标消息的捕获 由于鼠标的随机性,用户可能在一个应用程序的窗口内按下鼠标左键,而移动到另一个应用程序的窗口内后释放鼠标左键。为使所有鼠标消息均定向到某一窗口,而不管鼠标光标位于何处,就必须对鼠标加以捕捉。Windows为了这个目的,声明了一个专门用来捕获鼠标消息的函数: CWnd * SetCapture(); 一旦某窗口捕捉了鼠标,其他窗口无法得到鼠标消息。因此,应用程序应该及时释放鼠标,以使鼠标可以按系统预定的正常方式发送消息,否则将使鼠标的一些正常作用失效(例如,当用鼠标单击窗口的关闭按钮时,程序将不能被关闭)。释放鼠标要使用下面的这个函数: BOOL ReleaseCapture(); 这两个函数都不带输入参数。 例1开发一个用鼠标绘图的程序,当按下鼠标左键的同时移动鼠标可在窗口内绘图,松开鼠标左键后绘图结束。 (1)用应用程序向导生成一个新的单文档应用程序Draw1。 (2)在CDraw1View 类中添加WM_MOUSEMOVE消息的消息处理函数并填写代码如下 void CDraw1View : : OnMouseMove ( UINT nFlags , CPoint point ) { // TODO : Add your message handler code here if (nFlags MK_LBUTTON) {CDC *pDC= GetDC(); pDC- SetPixel(point,RGB(255,0,0)); ReleaseDC(pDC); } CView : : OnMouseMove ( nFlags , point ) ; } 运行时发现缺点:鼠标移动时看不到画线 解决方法:增加鼠标移动消息,使鼠标移动时动态画图 void CDraw2View::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC= GetDC(); pDC-SelectObject(cpen); endPoint=point; pDC-MoveTo(startPoint.x,startPoint.y); pDC-LineTo(endPoint.x,endPoint.y); ReleaseDC(pDC); CView::OnMouseMove(nFlags, point); } 缺点:看到的不是一条直线 修改OnMouseMove代码,实现动画 void CDraw2View::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDC *pDC= GetDC(); pDC-SelectObject(cpen); pDC-SetROP2(R2_XORPEN); pDC-MoveTo(startPoint.x,startPoint.y); pDC-LineTo(endPoint.x,endPoint.y); endPoint=point; pDC-MoveTo(startPoint.x,startPoint.y); pDC-LineTo(endPoint.x,endPoint.y); ReleaseDC(pDC); CView::OnMouseMove(nFlags, point); } 实现了动画,但是鼠标在不按下时也要画线 增加一个bool型变量lMouseFlag来标识鼠标左键是否按下 如果只有按下鼠标左键时移动鼠标才画图,那么一定设置此变量 (1)在CDraw2View类的头文件Draw2View.h中添加一行代码: bool lMouseFlag; (2)CDraw2View :: CDraw2View()中增加语句: lMouseFlag=false; (3) OnLButtonDown()修改如下: void CDraw2View ::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default startPoint=point; endPoint=point; lMouseFlag=true; CView::OnLButtonDown(nFlags, point); } (4)修改OnMouseMove代码 void CDraw2View::OnMous

文档评论(0)

LIU2021 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档