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