《菜单键盘和鼠标.ppt》由会员分享,可在线阅读,更多相关《菜单键盘和鼠标.ppt(83页珍藏版)》请在三一办公上搜索。
1、Windows程序设计教程,第8章 菜单、键盘和鼠标,菜单、键盘和鼠标是实现人机交互的最常用方式。在windows应用程序的设计过程中,合理地响应三者的操作,会使程序更加人性化。本章将具体介绍有关菜单、键盘与鼠标的知识点。,8.1 菜 单,通过菜单接受用户命令,是一种很常用的交互方法,同时也是一种很有效的方法。大部分Windows应用程序都使用下拉式菜单实现用户自己的函数,而不需要在窗口中提供多个按钮以完成这些功能。,8.1.1 菜单基本知识,菜单是用于显示一组选项(即菜单项)的下拉窗口,用户可以从这些菜单项中进行选择。在Windows窗口中,菜单分为两种:下拉式菜单和弹出式菜单(又称为上下文
2、菜单)。,1下拉式菜单,图8.1 下拉式菜单,2弹出式菜单,图8.2 弹出式菜单,8.1.2 创建下拉式菜单,1编程准则 虽然没有规定菜单设计的标准,但有许多关于菜单设计和组织的协议。,(1)文件(File)菜单应该位于最左边。它包含所有面向文件的功能(如New、Open、Save、Print等)和退出函数。退出菜单项应位于File菜单的最底端,并且与其他菜单项之间存在一条分隔线。,(2)编辑(Edit)菜单是紧接文件菜单的下一个菜单。此菜单包含所有的编辑功能,如复制、粘贴、拷贝、重做等。(3)视图(View)菜单包含那些控制和影响应用程序工作区域外貌的菜单项。,(4)窗口(Window)菜单
3、在多文档(MDI)风格的应用程序中使用。(5)帮助(Help)菜单是菜单条中最右边的菜单。它包含提供应用程序的帮助文档的菜单项。,2创建菜单,在Visual C+中,并不为对话框工程提供默认的菜单栏。本节将通过一个实例讲述如何为一个对话框工程添加自定义的菜单栏。,图8.3 sample001的最初运行结果,图8.4【Insert Resource】对话框,图8.5【Resource View】视图区,图8.6 修改菜单ID属性对话框,3添加菜单项,目前只是创建了一个空白的菜单栏,并没有为其添加菜单项。本例为空白菜单栏添加菜单及菜单项。实现过程是为菜单栏添加一个【绘图】菜单,然后为该菜单添加【直
4、线】和【圆圈】两个菜单项。,图8.7【Menu Item Properties】菜单属性对话框,图8.8 插入绘图菜单项,8.9【Menu Item Properties】对话框,图8.10 添加菜单项,图8.11 主对话框,图8.12 主对话框的属性对话框,图8.13 sample0801的运行结果,8.1.3 添加消息响应函数,菜单是用户与应用程序的桥梁,用户可以通过选择相应的菜单项来实现特定的功能。在上述几个小节中,只是简单地添加了一些菜单项,但菜单项并不能实现什么功能。本节将介绍如何为一个菜单项添加命令处理函数。,图8.14【MFC Class Wizard】对话框,图8.15【Add
5、 Member Function】对话框,图8.16 程序sample0801的运行结果,8.1.4 弹出式菜单,一般在鼠标右键单击窗口时,会出现弹出式菜单。下拉式菜单可以在图形化的界面下进行加载,而弹出式菜单需要用户手工编写代码动态地加载。如果想在程序中动态地创建弹出式菜单,就必须用到MFC中的菜单类CMenu。,图8.17 编辑菜单资源,图8.18 添加WM_RBUTTONDOWN的消息响应函数,图8.19 添加菜单命令响应函数,图8.20 查看弹出式菜单,图8.21 进行画圆操作,8.2 键 盘,当用户操作键盘时,会产生相应的键盘消息并发送给应用程序。然后应用程序中相应的键盘消息响应函数
6、会完成其特定的工作。本节将对Windows中键盘的相关机制进行介绍。,8.2.1 键盘的虚拟码,当用户按下键盘上的某个按键时,键盘的接口会产生与该按键相对应的编码。这个编码被称为键的扫描码。而键的扫描码存在设备相关性,因此为了方便程序设计,Windows为每个按键提供了相应的与设备无关的编码,而这个编码被称为虚拟码。,因此在Windows应用程序的编写过程中,用户可以忽略扫描码,而直接使用虚拟码来对键盘进行操作。,8.2.2 键盘响应,通过键盘消息,Windows应用程序可以得知键盘事件。一般情况下,键盘消息分为两类:按钮消息和字符消息。每当用户按下或松开一个键时,就会产生一个按键消息。当按键
7、产生了一个可显示的字符时,就产生了一个字符消息。,图8.22 添加OnKeyDown()响应函数,图8.23 程序sample0803的运行结果,8.3 鼠 标,鼠标和键盘是计算机中最常用的输入设备。在Windows中,鼠标同键盘一样,其输入也是以消息的形式输入的。本节将对鼠标的响应原理与使用进行详细介绍。,8.3.1 鼠标消息,当用户对计算机操作时,鼠标的使用是必不可少的。在平时使用计算机的时候,用户按下鼠标按钮或是移动鼠标的时候,都会产生相应的事件。,系统会根据不同的事件发送不同的消息。如果应用程序中有该事件的响应函数,系统就会调用该消息对应的函数完成特定的任务。,鼠标消息可以分为两类:客
8、户区鼠标消息和非客户区鼠标消息。,1客户区鼠标消息,鼠标在客户区产生的消息被称为客户区鼠标消息。常用的客户区鼠标消息如表8.4所示。,2非客户区鼠标消息,鼠标在非客户区产生的消息称为非客户区鼠标消息。常用的非客户区鼠标消息如表8.5所示。,8.3.2 鼠标响应,1响应客户区鼠标消息 在MFC中,客户区鼠标消息处理函数的原型为:afx_msg void OnMsgName(UINT nFlags,CPoint point),图8.24 添加消息响应函数,图8.25 最初圆形显示,图8.26 扩大圆形显示,2响应非客户区鼠标消息,在Windows中,对于非客户区消息都做了默认的处理。其这样做的目的
9、就是为了让用户最好不要干涉这些本应由系统来处理的消息。,但在某些特殊情况下,用户可以通过非客户区鼠标消息来完成特定的任务。正因为Windows不希望用户干涉非客户区鼠标消息,因此在Visual C+中没有提供处理非客户区鼠标消息的编辑工具。,如果想要使用非客户区鼠标消息,可以手工添加非客户区鼠标消息的消息映射宏及其对应的消息响应函数。,图8.27 程序sample0805的运行结果,8.3.3 鼠标光标,鼠标光标是鼠标与用户之间的接口。在Windows中,鼠标光标的特性是在WNDCLASS结构中定义的,而每个窗口都有其相应的WNDCLASS结构。,从前面的章节中,读者已经了解到,当使用全局函数
10、AfxRigisterWndClass()注册窗口类型时,需要初始化WNDCLASS结构中的字段。,AfxRigisterWndClass()函数原型如下:LPCTSTR AfxRigisterWndClass(UINT nClassStyle,HCURSOR hCursor=0,HBRUSH hbrBackground=0,HICON hIcon=0),8.3.4 鼠标键盘,在讲述了鼠标与键盘的知识点后,本节将二者结合起来。下面通过一个基于单文档的应用程序实例来介绍鼠标键盘的综合运用。,本例主要实现的功能是利用鼠标在客户区绘制图形。,图8.28 添加鼠标响应,图8.29 添加【重绘操作】菜单
11、项,图8.30【重绘操作】菜单项所对应的属性对话框,图8.31 添加菜单项响应,图8.32 程序sample0806的运行结果,小结,本章主要介绍了人机交互的重要角色菜单、鼠标和键盘。首先介绍了有关菜单的基础知识,并结合具体的实例详细讲解了利用Visual C+进行下拉式菜单、通过代码动态控制菜单以及浮动菜单的编程。,对于鼠标和键盘的操作,只是讲述了如何捕获二者的消息。最后通过一个实例讲述了鼠标、键盘和菜单的综合运用。,上机指导,实验一:创建下拉式菜单 实验内容 创建一个基于对话框的应用程序TestOne。然后为其添加一个菜单栏。运行结果如图8.31所示。,图8.33 实验一的运行结果,实验目
12、的 为一个基于对话框的应用程序添加一个菜单栏。实现思路 在节中已经介绍了如何为对话框工程添加一个绘图菜单。按照节中的步骤,设置图8.33中的有关属性。,实验二:识别键盘按键 实验内容 创建一基于单文档的应用程序TestTwo。创建一基于单文档的应用程序,每按下一个键盘按键,就会弹出一个消息对话框,提示按下的是哪一个按键。运行结果如图8.34所示。,图8.34 实验二的运行结果,实验目的 熟悉键盘上常用按键所对应的虚拟码,并能对键盘消息添加响应。实现思路 在节中介绍了如何响应键盘上面4个箭头的事件。在此只要熟悉一下按键的虚拟码即可。,实验三:键盘与鼠标的结合 实验内容 创建一基于单文档的应用程序TestThree。当运行该程序时,按下Ctrl+Shift+鼠标左键,弹出一个消息对话框。运行结果如图8.35所示。,图8.35 实验三的运行结果,实验目的 结合鼠标消息与键盘上面的按键,进行具体操作。实现思路 首先添加按下鼠标左键所对应的消息响应函数。然后在该函数里面判断是否也按下了Ctrl和Shift键。,