07界面编程5-鼠标、键盘与光标(windows 编程技术)
- 格式:doc
- 大小:204.50 KB
- 文档页数:14
实验一Windows 7的基本操作实验二文件和文件夹的概念与操作实验三系统自带的“附件”应用程序实验四Windows 7的搜索功能实验五定制用户的工作环境实验六Windows 7的磁盘管理项目二Windows 7操作系统实验一Windows 7的基本操作【实验目的】通过本次实验,了解Windows 7的启动与退出方法;了解Windows 7桌面的基本构成要素;学会排列桌面图标与调整任务栏;掌握窗口和对话框的组成与基本操作;观察所用计算机主要硬件的基本信息。
项目二Windows 7操作系统【实验内容】Windows 7的启动与关闭;了解Windows 7桌面的基本构成要素;学会排列桌面图标与调整任务栏;掌握窗口和对话框的组成与基本操作;观察所用计算机主要软、硬件的基本信息。
【实验步骤】1.Windows 7的启动与关闭(1)Windows 7的启动按照先外设后主机的顺序,先打开显示器等外设的电源开关,再开主机开关,等待计算机启动到WINDOWS状态。
正常情况下,将出现Windows 7的桌面,如果启动过程中出现“黑屏”、“蓝屏”或有报警声时,Windows 7启动不成功,可能的情况如下,软件故障:Windows 7操作系统被病毒或人为破坏不能正常启动;硬件故障:计算机中某一个硬件出现损坏或接触不良故障,导致系统无法启动。
(2)Windows 7的关闭关闭计算机之前,首先要关闭任务栏中打开的所有任务。
具体操作:可以右击任务栏中的相关软件图标按钮,在打开的快捷菜单中,选择“关闭”菜单项并单击,即可关闭打开的一个任务,同样方法,可以关闭其它所有运行的任务。
关闭Windows 7操作系统也就是关闭计算机,使用鼠标单击【开始】→【关闭计算机】项,在打开的关闭计算机对话框中,选择“关闭”选项,单击【确定】按钮,计算机主机自动关闭。
在关机计算机对话框中,除了“关闭”项外,还会发现“待机”、“重新启动”和“等待”等项目,同学们可以分别操作一下,总结一下选择不同项目的不同功能。
实验五 MFC 鼠标和键盘编程实验一、预备知识1、键盘在应用程序中的应用(1)键盘消息按键消息:按下或松开一个键时就产生了一按键消息。
字符消息:一个按键的组合产生了一个可以显示的字符时,就产生了一个字符消息。
(2)按键消息的两个参数wParam:包括了识别按下的键的虚键码。
lParam(32 位的变量):重复计数位(0~15 位)、OEM 扫描码(16~23 位)、扩展键标志(24 位)、保留位(25~28 位)、关联码(29 位)、键的先前状态(位30)、转换状态(31 位)。
(3)字符消息系统字符消息:WM_SYSKEYDOWN 和WM_SYSKEYUP 按键消息只能产生系统消息。
非系统字符消息:WM_KEYDOWN 和WM_KEYUP 的按键消息只能产生非系统消息。
2、鼠标在应用程序中的应用鼠标作为定位输入设备,通过鼠标单击、双击和拖动功能,用户可以很容易地操作基于Windows 图形界面的应用程序。
Windows 中通过光标来指示当前鼠标的位置,在Windows 操作系统中预概念了15几种光标,并在相关头文件中加以概念。
(1)鼠标消息鼠标消息的长字参数lParam包括了鼠标位置(相当于窗口的左上角为原点的坐标值)。
低位包括鼠标位置的x 坐标值,高位包括鼠标位置的y 坐标。
字参数wParam包含了指示各类虚键状态的值(2)对于鼠标消息的处置监测Shift 和Ctrl 键case WM_LBUTTONDOWN: 屏幕上绘制一个矩形,并将其内部划分成4 个矩形区域,在矩形内移动鼠标时,在上面划分的4 个区域中显示不同的光标,并在屏幕左上角显示光标坐标。
(2).当按下SHIFT 和CTRL 键时,显示一个消息框,提示用户按下的是哪个键。
(2) 总结鼠标消息、按键消息和字符消息的字参数和长字参数包括信息的意义和处置方式。
鼠标消息:wParam:包括了指示各类虚键状态的值。
lParam:包括了鼠标的位置信息,低位包括鼠标位置的x坐标值,高位包含鼠标位置的y位置按键消息:wParam:包括了识别按下的键的虚键码lParam:包括重复计数位(0-15位)、OEM扫描码(16-32位)、扩展键的标志(24位),保留位(25-28位)、关联码(29位)、键的先前状态(30位)、转换状态(31位)。
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 鼠标事件与消息 事件 客户区鼠标消息 非客户区鼠标消息 双击左键 WM_LBUTTONDBLCLK WM_NCLBUTTONDBLCLK 按下左键 WM_LBUTTONDOWN WM_NCLBUTTONDOWN 释放左键 WM_LBUTTONUP WM_NCLBUTTONUP 双击中键 WM_MBUTTONDBLCLK WM_NCMBUTTONDBLCLK 按下中键 WM_MBUTTONDOWN WM_NCMBUTTONDOWN 释放中键 WM_MBUTTONUP WM_NCMBUTTONUP 鼠标移动 WM_MOUSEMOVE WM_NCMOUSEMOVE 双击右键 WM_RBUTTONDBLCLK WM_NCRBUTTONDBLCLK 按下右键 WM_RBUTTONDOWN WM_NCRBUTTONDOWN 释放右键 WM_RBUTTONUP WM_NCRBUTTONUP 因为有的鼠标没有中键,所以应用程序很少使用与中键有关的三个消息。 另外,双击的最大时间间隔可用下列函数获取或设置(默认为500毫秒): UINT GetDoubleClickTime(VOID); // 返回间隔的毫秒数 BOOL SetDoubleClickTime(UINT uInterval); // 若成功返回非0值 其中,uInterval为时间间隔值(毫秒数)。
7.1.2 响应鼠标消息 可以用MFC的类向导,为视图类或对话框类等CCmdTarget类的派生类,添加鼠标消息响应函数。常用的鼠标消息响应函数的原型为: afx_msg void OnMouseMove( UINT nFlags, CPoint point ); afx_msg void OnLButtonDown( UINT nFlags, CPoint point ); afx_msg void OnLButtonUp( UINT nFlags, CPoint point ); afx_msg void OnLButtonDblClk( UINT nFlags, CPoint point ); 3
afx_msg void OnRButtonUp( UINT nFlags, CPoint point ); 其中的参数:point为鼠标的位置坐标(相对于客户区的左上角)、nFlags为标志参数——可取表7-2中所列的符号常量值(二进制位,可以用“与”来判断,用“或”来组合)。
表7-2 鼠标响应函数中标志参数nFlags的取值 符号常量 数值 含义 MK_CONTROL 8 Ctrl键被按下 MK_LBUTTON 1 左鼠标键被按下 MK_MBUTTON 16 中鼠标键被按下 MK_RBUTTON 2 右鼠标键被按下 MK_SHIFT 4 Shift键被按下 与菜单项的事件处理程序类似,每次当你添加一个鼠标消息(如WM_MOUSEMOVE)响应时,MFC类向导会做如下一系列工作: 在头文件(*.h)的类定义中,添加消息响应函数的原型。如: // 生成的消息映射函数 protected: DECLARE_MESSAGE_MAP() public: „„ afx_msg void OnMouseMove(UINT nFlags, CPoint point); 在代码文件(*.cpp)尾部,添加含默认代码的消息响应函数体。如: void CStudentView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnMouseMove(nFlags, point); } 在代码文件(*.cpp)头部,添加对应的消息映射宏。如: BEGIN_MESSAGE_MAP(CStudentView, CView) „„ ON_WM_MOUSEMOVE() 4
END_MESSAGE_MAP() 7.1.3 单击和拖动 注意,在Windows的鼠标消息中,并没有单击和拖动消息。编程中,单击操作一般用松开左鼠标键消息WM_LBUTTONUP来代替,如: void CStudentView::OnLButtonUp(UINT nFlags, CPoint point) { ... ... CView::OnLButtonUp(nFlags, point); } 而拖动操作则在鼠标移动的消息响应中判断左鼠标键是否被按下来区分。如: void CStudentView::OnMouseMove(UINT nFlags, CPoint point) { if (nFlags & MK_LBUTTON) { ... ... } CView::OnMouseMove(nFlags, point); }
7.1.4 捕捉鼠标 因为鼠标消息只发给位于当前光标之下的窗口,所以如果用户在客户区按下鼠标,拖动鼠标到客户区外后才释放鼠标,则应用程序得不到鼠标被释放的消息,可能会产生错误的响应操作。为避免这种事情发生,可以调用从CWnd类继承的成员函数SetCapture来捕捉鼠标,使得以后的鼠标消息都发给自己,而不论鼠标的光标是否在自己窗口的客户区。 当程序不再需要鼠标消息后,必须调用API中的全局函数ReleaseCapture释放对鼠标的捕捉,从而使其他程序可以获得它自己的鼠标消息。在窗口失去对鼠标的捕捉时,会收到Windows发送的WM_CAPTURECHANGED消息。还可以调用从CWnd类继承来的成员函数GetCapture来获得当前捕捉鼠标的窗口的指针。这些函数的原型如下: CWnd* SetCapture( ); BOOL ReleaseCapture(); static CWnd* PASCAL GetCapture( ); 5
Windows应用程序一般是在用户按下鼠标键时设置鼠标捕捉,而在用户释放鼠标键后释放鼠标捕捉。如: void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { m_bLButtonDown = TRUE; SetCapture(); ... ... CView::OnLButtonDown(nFlags, point); } void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { ... ... m_bLButtonDown = FALSE; ReleaseCapture(); CView::OnLButtonUp(nFlags, point); }
7.2 键盘 与鼠标一样,当用户敲击键盘时,会产生键盘事件(keyboard event)。在MFC中,它们也是由消息、消息映射宏和消息响应函数来处理。
7.2.1 按键 Windows中的按键有两类: 普通按键:在拥有键盘输入焦点的窗口中,在没有按下Alt键时情况下,所按的各种(组合)键。 系统按键:按下Alt键时的各种按键;或在没有任何拥有键盘输入焦点的窗口时,所按下的任意(组合)键。 为了保证像Alt+F4(关闭窗口、程序或操作系统)这样的系统命令能被正确的执行,Windows总是将系统按键所产生的各种键盘消息,发送给CWnd类的对应系统消息响应函数作默认处理。