欢迎来到天天文库
浏览记录
ID:15372306
大小:162.00 KB
页数:14页
时间:2018-08-02
《07界面编程5-鼠标、键盘与光标》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第7章界面编程5-鼠标、键盘与光标Windows是一种基于消息的交互式GUI操作系统,用户的操作主要通过鼠标和键盘进行。Windows利用消息来处理由用户操作所引发的鼠标和键盘事件,程序员一般通过在视图类中添加相应的消息响应函数,并编写具体响应代码来处理鼠标和键盘消息。鼠标的当前位置由屏幕上的光标来表示,程序员可以根据需要来动态设置不同形状的光标。本章先介绍鼠标与键盘消息及其响应,然后再讨论设置与隐藏光标的方法,最后给出一个综合利用鼠标与键盘消息响应和光标设置的实例。7.1鼠标鼠标(mouse)是GUI中最常用的指示跟踪设备,由美国斯坦福研究所的DouglasEngelbart和BillEn
2、glish于1963年发明,BillEnglish于1972年发明滚球式(ball)纯机械鼠标,1983年罗技(Logitech)公司发明了第一只光学机械式(简称为光机式或机械式)鼠标,1999年微软与安捷伦(Aeilent,后改组为安华高,Avago)公司合作推出了IntelliEye光学引擎和世界上第一款不需专业鼠标垫的光电鼠标,2003年微软和罗技分别推出蓝牙无线鼠标,2005年罗技与安华高合作推出了第一款(无线)激光鼠标,2008年微软推出了采用BlueTrack技术几乎兼容所有表面的蓝光鼠标。现代鼠标一般为带滚轮的三键光电或激光式有线或无线(蓝牙或红外)鼠标。7.1.1鼠标事件与消
3、息鼠标事件(mouseevent)指用户的鼠标操作,基本的鼠标操作有:按下(press)和松开(release)鼠标键、单击(click)或双击(double-click)鼠标键、移动(move)或拖动(drag)鼠标,其中左鼠标键按下/松开、移动/拖动鼠标在编程中最常用。大多数鼠标操作都有相对应的Windows消息(参见表7-1)。按照鼠标事件发生时鼠标光标所处的窗口区域,可以把鼠标消息分成两类:l客户区(clientarea)鼠标消息:鼠标光标位于窗口的客户区时所产生的鼠标消息。l非客户区(nonclientarea)14鼠标消息:鼠标光标位于窗口的非客户区(如边框、标题条、系统菜单图标
4、、最大化/最小化/还原按钮、关闭按钮、菜单、工具条、滚动条、状态条)时所产生的鼠标消息。其中,只有客户区鼠标消息是常用的。至于非客户区鼠标消息,除了Windows自己用于系统管理外一般很少使用。在本课程中我们只讨论客户区鼠标消息及其处理。在Windows的SDK编程中,必须将非客户区鼠标消息交给DefWindowProc函数处理。表7-1鼠标事件与消息事件客户区鼠标消息非客户区鼠标消息双击左键WM_LBUTTONDBLCLKWM_NCLBUTTONDBLCLK按下左键WM_LBUTTONDOWNWM_NCLBUTTONDOWN释放左键WM_LBUTTONUPWM_NCLBUTTONUP双击中
5、键WM_MBUTTONDBLCLKWM_NCMBUTTONDBLCLK按下中键WM_MBUTTONDOWNWM_NCMBUTTONDOWN释放中键WM_MBUTTONUPWM_NCMBUTTONUP鼠标移动WM_MOUSEMOVEWM_NCMOUSEMOVE双击右键WM_RBUTTONDBLCLKWM_NCRBUTTONDBLCLK按下右键WM_RBUTTONDOWNWM_NCRBUTTONDOWN释放右键WM_RBUTTONUPWM_NCRBUTTONUP因为有的鼠标没有中键,所以应用程序很少使用与中键有关的三个消息。另外,双击的最大时间间隔可用下列函数获取或设置(默认为500毫秒):UI
6、NTGetDoubleClickTime(VOID);//返回间隔的毫秒数BOOLSetDoubleClickTime(UINTuInterval);//若成功返回非0值其中,uInterval为时间间隔值(毫秒数)。7.1.2响应鼠标消息可以用MFC的类向导,为视图类或对话框类等CCmdTarget类的派生类,添加鼠标消息响应函数。常用的鼠标消息响应函数的原型为:afx_msgvoidOnMouseMove(UINTnFlags,CPointpoint);afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);afx_msgvoidOnLButto
7、nUp(UINTnFlags,CPointpoint);14afx_msgvoidOnLButtonDblClk(UINTnFlags,CPointpoint);afx_msgvoidOnRButtonUp(UINTnFlags,CPointpoint);其中的参数:point为鼠标的位置坐标(相对于客户区的左上角)、nFlags为标志参数——可取表7-2中所列的符号常量值(二进制位,可以用“与”来判断,用“
此文档下载收益归作者所有