window程序设计第9章

上传人:san****019 文档编号:69705983 上传时间:2019-01-14 格式:PPT 页数:19 大小:238.81KB
返回 下载 相关 举报
window程序设计第9章_第1页
第1页 / 共19页
window程序设计第9章_第2页
第2页 / 共19页
window程序设计第9章_第3页
第3页 / 共19页
window程序设计第9章_第4页
第4页 / 共19页
window程序设计第9章_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《window程序设计第9章》由会员分享,可在线阅读,更多相关《window程序设计第9章(19页珍藏版)》请在金锄头文库上搜索。

1、第9章 鼠标程序编程基础,鼠标是一种输入设备,是一种必要的选择设备。虽然拔下鼠标,Windows仍然可以执行,但是试图不用鼠标来使用Windows就像用脚趾来弹钢琴一样,是非常别扭的。通常认为,键盘便于输入与操作文字变量,而鼠标则便于画图和操作图形对象。 Windows 98支援单键、双键或者三键鼠标,还可以使用摇杆或者光笔来模拟单键鼠标。,9.1.1 GetSystem Metrics函数的应用,理论上,可以用GetSystemMetrics函数来确认鼠标是否存在: fMouse = GetSystemMetrics (SM_MOUSEPRESENT) ;/前缀SM_代表系统信息 在 Win

2、dows NT中,这是可用的,然而,在Windows 98中,这个函数不可用 。如果要确定所安装鼠标的按键个数,可使用 cButtons = GetSystemMetrics (SM_CMOUSEBUTTONS) ; 鼠标游标上有一个像素点,它称为鼠标游标的“热点”,这个“热点”指向显示器上一个精确地址,这个地址称为鼠标地址。 。,9.1.2预先定义的鼠标游标,Windows支援好几种预先定义的鼠标游标。最常见的鼠标游标是IDC_ARROW。 Windows和DOS中称呼是不一样的,Windows中游标是指鼠标游标,而DOS中把屏幕上显示的指示键盘输入地址的符号称为游标,键盘的游标在Windo

3、ws中称为插入符号。,9.1.3鼠标消息与键盘消息的区别,Windows只能把键盘消息发送给拥有输入焦点的窗口函数。而鼠标消息与此不同:只要鼠标跨越窗口或者在某窗口中按下鼠标按键,那么窗口函数就会收到鼠标消息,而不管该窗口是否活动或者是否拥有输入焦点。Windows为鼠标定义了21种消息,不过,其中11个消息和显示区域无关,它称之为”非显示区域”消息,Windows应用程序可以不考虑这些消息。,9.1.4显示区域内的鼠标消息及其处理方法,显示区域内的鼠标消息是怎么形成的呢?由鼠标硬件和鼠标驱动程序把鼠标事件(或称鼠标动作)变换成为扫描码,再由Windows操作系统把扫描码变换成为鼠标虚拟键码,

4、这一点和键盘的处理是一样的。鼠标跨越窗口的显示区域也是一个鼠标动作,窗口函数会收到WM_MOUSEMOVE鼠标消息当在窗口的显示区域中按下或者释放一个鼠标按键时,根据按键的左,中,右窗口函数会接收到下面这些消息: 请见教材程序9鼠标消息及其处理方法.doc,9.1.5鼠标消息在其他情况下的处理,当把鼠标移过窗口显示区域时,Windows并不为鼠标在显示区域内的每个可能的像素地址都产生一个WM_MOUSEMOVE消息。 那么,应用程序到底产生多少个WM_MOUSEMOVE消息呢?这依赖於鼠标硬件,以及应用程序的窗口函数在处理WM_MOUSEMOVE消息的速度 。如果在非活动窗口的显示区域中按下鼠

5、标左键,Windows将把非活动窗口改为活动窗口 。,9.1.6鼠标消息的处理例子,请见(CONNECT程序) ( 教材程序99-1 CONNECT.doc),9.2 按键及其处理,Shift, Ctrl键的处理请见教材程序9Shift,control的处理.doc 为单键鼠标提供右键的处理方法请见教材程序9为单键鼠标提供右键的处理方法.doc,9.2.3 如何使用GetKeyState函数了解鼠标按键状态,必须注意:只有在处理 WM_LBUTTONDOWN消息期间,GetKeyState只能返回目前正在处理的鼠标按键或者Shift键的状态。否则, GetKeyState是不能用它来检查键的状

6、态的。例如: while (GetKeyState (VK_LBUTTON) = 0) 请不要这样做!,因为 VK_LBUTTON仅表示虚拟键码,至于它是否桉下是不知道的,所以不能用GetKeyState (VK_LBUTTON )求得VK_LBUTTON的状态。当桉下这个VK_LBUTTON按键时必定产生WM_LBUTTONDOWN消息,所以,只有在处理 WM_LBUTTONDOWN消息期间,才有可能应用while (GetKeyState (VK_LBUTTON) = 0),才能知道VK_LBUTTON桉下没有。;,9.2.4 双击鼠标按键及其处理,两次单击是否符合下面两个条件: 两次单击

7、发生的地址十分接近。 两次单击发生的地址内定为横向范围超过系统字体字符的平均宽,纵向范围不超过半个字符的高。 两次单击发生的时间间隔必须在规定的时间范围内。用户可以在Windows系统的“控制台”中改变两次单击的时间间隔。双击的设置如下: wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;,9.3 非显示区域鼠标消息及其处理,在窗口的显示区域内移动或按下鼠标按键时,将产生10种消息。如果鼠标在窗口的显示区域之外但还在窗口内(即非显示区域) 移动或按下鼠标按键时,Windows就给窗口函数发送一条”非显示区域”鼠标消息。 非显示区域包括

8、标题栏、功能表和窗口滚动条。通常,窗口函数不需要处理非显示区域内的鼠标消息,当遇到鼠标在”非显示区域”中桉下按键或移动产生”非显示区域”鼠标消息时,窗口函数就转到DefWindowProc,DefWindowProc函数处理 ”非显示区域”消息分支中要做的事情,,9.3.1 非显示区域鼠标消息,非显示区域鼠标消息的种类几乎完全与显示区域鼠标消息相对应。消息中含有字母“NC”以表示是”非显示区域”。如果鼠标在窗口的非显示区域中移动,那么窗口函数会接收到WM_NCMOUSEMOVE消息,不过,这个消息的处理一般放在DefWindowProc中。 请见教材程序9非显示区域内能产生的消息.doc。,9

9、.3.2 非显示区域中的命中测试消息 (WM_NCHITTEST),Windows中鼠标消息共有21个,其中,显示区域和非显示区域各9个,加上WM_MOUSEMOVE消息和WM_NCMOUSEMOVE消息,共20个,最後一个消息是非显示区域鼠标消息,即WM_NCHITTEST(hit test消息)。此消息的意思是“非显示区域命中测试消息”,此消息是由鼠标停留在非显示区域所产生的。此消息的优先级高於显示区域和非显示区域的其他鼠标消息。和其他非显示区域消息一样,此消息lParam参数是鼠标在屏幕座标内的x和y地址。作为消息来说wParam参数没有用到。,9.3.3 从消息产生消息,Windows

10、在WM_NCHITTEST消息分支中,可以产生其他鼠标消息,这种由消息引出其他消息的想法在Windows中是很普遍的。,9.4 显示区域中的命中测试程序,显示区域中的命中测试程序CHECKER1.C(教材程序99-2 CHECKER1.doc) 使用键盘模拟鼠标(教材程序99-3 CHECKER2.doc),9.5 子窗口的基本概念,窗口里面的窗口称为子窗口,包含子窗口的窗口称为主窗口。一个窗口可以有多个子窗口。子窗口还可以有子窗口,这样窗口就形成了一个树型结构。 子窗口具有窗口的一切性质。 如果子窗口与主窗口或者子窗口与子窗口使用不同的窗口类,那么每个子窗口都要有它自己的窗口函数。不同的子窗

11、口也可以定义不同的背景颜色和不同的内定游标。,9.5.1 用子窗口实现CHECKER程序-CHECKER3.C,CHECKER3有两个窗口函数,两个窗口类,调用CreateWindow函数创建主窗口和子窗口,调用时的参数见教材程序9调用CreateWindow创建主窗口,子窗口时的参数比较.doc CHECKER3.C请见 (教材程序99-4 CHECKER3.doc),9.5.2 CHECKER3中添加键盘界面-CHECKER4,为CHECKER3添加键盘介面则成为CHECKER4,在阅读CHECKER4必须注意下面几个特点:, 1 采用对话框中所用的方法,具有点划矩形框的子窗口表示它有输入焦点。 2 父窗口和子窗口要共同对键盘消息进行处理。按下Spacebar键和Enter键时,子窗口将锁定复选标记。按下方向键时,父窗口将在子窗口之间移动输入焦点。 3 当您在子窗口上单击时,情况会有些复杂,这时是父窗口而不是子窗口获得输入焦点。 CHECKER4.C请见(教材程序99-5 CHECKER4.doc),练习 九,请见教材程序9练习 九.doc,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号