第8章-菜单、键盘和鼠标_第1页
第8章-菜单、键盘和鼠标_第2页
第8章-菜单、键盘和鼠标_第3页
第8章-菜单、键盘和鼠标_第4页
第8章-菜单、键盘和鼠标_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows程序设计教程,第8章菜单、键盘和鼠标,菜单、键盘和鼠标是实现人机交互的最常用方式。在windows应用程序的设计过程中,合理地响应三者的操作,会使程序更加人性化。本章将具体介绍有关菜单、键盘与鼠标的知识点。,8.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个箭头的事件。在此只要熟悉一下按键的虚拟码即可。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论