1 第7章 界面编程5-鼠标、键盘与光标 Windows 是一种基于消息的交互式 GUI 操作系统,用户的操作主要通过鼠标和键盘进行。Windows 利用消息来处理由用户操作所引发的鼠标和键盘事件,程序员一般通过在视图类中添加相应的消息响应函数,并编写具体响应代码来处理鼠标和键盘消息。鼠标的当前位置由屏幕上的光标来表示,程序员可以根据需要来动态设置不同形状的光标。 本章先介绍鼠标与键盘消息及其响应,然后再讨论设置与隐藏光标的方法,最后给出一个综合利用鼠标与键盘消息响应和光标设置的实例。 7.1 鼠标 鼠标(mouse)是 GUI 中最常用的指示跟踪设备,由美国斯坦福研究所的 Douglas Engelbart 和 Bill English 于 1963 年发明,Bill English 于 1972 年发明滚球式(ball)纯机械鼠标,1983 年罗技(Logitech)公司发明了第一只光学机械式(简称为光机式或机械式)鼠标,1999 年微软与安捷伦((Aeilent,后改组为安华高, Avago)公司合作推出了IntelliEye 光学引擎和世界上第一款不需专业鼠标垫的光电鼠标,2003 年微软和罗技分别推出蓝牙无线鼠标,2005 年罗技与安华高合作推出了第一款(无线)激光鼠标,2008 年微软推出了采用 Blue Track技术几乎兼容所有表面的蓝光鼠标。现代鼠标一般为带滚轮的三键光电或激光式有线或无线(蓝牙或红外)鼠标。 7.1.1 鼠标事件与消息 鼠标事件(mouse event)指用户的鼠标操作,基本的鼠标操作有:按下(press)和松开(release) 鼠标键、单击(click)或双击(double-click) 鼠标键、移动(move)或拖动(drag)鼠标,其中左鼠标键按下/松开、移动/拖动鼠标在编程中最常用。 大多数鼠标操作都有相对应的 Windows 消息(参见表 7-1)。按照鼠标事件发生时鼠标光标所处的窗口区域,可以把鼠标消息分成两类: 客户区(client area)鼠标消息:鼠标光标位于窗口的客户区时所产生的鼠标消息。 非客户区(nonclient area)鼠标消息:鼠标光标位于窗口的非客户区(如边框、标题条、系统菜单图标、最大化/最小化/还原按钮、关闭按钮、菜单、工具条、滚动 2 条、状态条)时所产生的鼠标消息。 其中,只有客户区鼠标消息是常用的。至于非客户区鼠标消息,除了 Windows 自己用于系统管理外一般很少使用。在本课程中我们只讨论客户区鼠标消息及其处理。在 Windows 的SDK 编程中,必须将非客户区鼠标消息交给 DefWindowProc 函数处理。 表 7-1 ...