《Visual C++.NET程序设计教程与上机指导》第6章:Visual C++ .NET使用资源

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第6章VisualC++.NET使用资源教学提示:前几章学习了利用VisualC++.NET进行面向对象程序设计的基本知识及文档/视图模型,这一章主要介绍资源的使用。资源是程序设计的重要组成部分,它和用户直接打交道。在一些失败的软件中,有很大一部分原因是程序的界面设计不好(即资源使用不当),可见正确地使用资源是很重要的。这一章处理的资源包括菜单、加速键、位图、光标、对话框、图标、字符串表、工具栏、状态栏、版本信息、鼠标及键盘的使用。教学目标:了解资源的种类,掌握常用资源的正确使用方法,通过上机实践进一步巩固对资源的操作方法。6.1使用菜单众所周知,基本上所有的软件都有菜单(除了一些游戏软件、工具软件外),所以掌握菜单资源的使用方法是一个程序员的基本功。6.1.1在程序中加入菜单6.1.2菜单类CMenu6.1.3菜单消息处理函数的使用6.1.4更新命令用户接口消息的使用6.1.1在程序中加入菜单Windows菜单是大家比较熟悉的应用程序组成元素,它由菜单栏及与它相连的弹出式菜单组成。当用户选择了某个上层菜单栏时,就会出现弹出式菜单,用户可以用鼠标单击相应的菜单命令执行相应的操作。当用VisualC++.NET的MFC应用程序向导生成单文档应用程序时,框架会自动生成一个默认ID为IDR_MAINFRAME的菜单资源;生成多文档应用程序时产生两个菜单资源:IDR_MAINFRAME和IDR_PROJECTNAMETYPE(PROJECTNAME为应用程序的项目名称),当没有打开MDI子窗口时显示IDR_MAINFRAME菜单,打开MDI子窗口之后显示IDR_PROJECTNAMETYPE菜单。当然也可以自己加入或修改菜单资源,甚至可以不用菜单编辑器,只通过菜单类CMenu就可以动态生成想要的菜单资源。不过这个要求较高,一般是高级用户才用到,入门级的用户只要会用菜单编辑器生成菜单就可以了。使用菜单编辑器可以创建标准菜单和菜单选项,为基本菜单和菜单选项定义热键、加速键、状态栏提示,也可以创建上下文(即快捷)菜单,以便用鼠标右键来执行要频繁使用的命令。返回6.1.2菜单类CMenu如果需要创建上下文菜单,或者在运行时对菜单进行动态修改,就必须使用CMenu类。可以通过下列三种方法获得指向CMenu对象的指针:●利用CWnd::GetMenu()函数获得指向指定菜单的指针。●利用CWnd::GetSystemMenu()函数获得指向系统菜单的指针。●利用CMenu::LoadMenu()函数从应用程序的可执行文件装载菜单资源,并将它连接到CMenu对象上。返回6.1.3菜单消息处理函数的使用在菜单编辑器界面的一个菜单项上右击,单击弹出式菜单中的【添加事件处理程序】选项,即弹出【事件处理程序向导】对话框,在【类列表】中可以发现视图、文档、框架和应用类都可以对该菜单的ID进行消息映射。如图6.3所示。返回图6.3对菜单的ID进行映射返回6.1.4更新命令用户接口消息的使用通常菜单项只有一个状态,但是在许多情况下菜单项可能有多个状态。比如,菜单项在某一时刻允许使用,而在另一时刻不可以使用,菜单项可以被加注检查标记,以表明被选中或未被选中。MFC为自动更新用户接口提供了更新命令用于接口消息处理。更新命令UI消息只适合于弹出式菜单的菜单项,对顶层菜单项则不适用。比如,不能利用更新命令UI消息来更新图6.2中的顶层菜单【画图】。在显示弹出式菜单时,如果菜单项有一个更新处理函数,则它被调用进行更新;如果没有,则框架检查命令处理函数是否存在,若不存在,则使菜单项变灰。因此为了要使一个菜单项有效,则必须有一个菜单处理函数或更新处理函数来处理它。与菜单项处理函数一样,用事件处理程序向导处理菜单更新函数时会自动向应用程序框架中添加一些框架代码。返回图6.2加入菜单返回6.2使用加速键现在,许多软件对一些常用的操作都定义了加速键,使用过微软公司的Word文字处理软件的人都知道,它里面定义了许多的加速键,如同时按下Ctrl+N加速键,就新建了一个文档。在资源视图中单击选项Accelerator左边的加号,再双击IDR_MAINFRAME打开加速键编辑器。可以添加、删除、更改和浏览项目所用到的加速键,也可以查看和更改与加速键表中每个条目有关的资源标识符,还可以为某个菜单选项定义加速键。如果要在加速键表中添加新的加速键,用鼠标单击加速键表中下面的一空行或按Insert就可以加入新的加速键。一个加速键一般包含4项:ID、修饰符、键、类型。其中ID是已经定义的菜单项ID或工具栏图标ID,修饰符指与键同时按下的一些辅助键,如Ctrl、Shift、Alt及其组合键,类型只有两种:ASCII码值和虚拟键值。其操作界面如图6.4所示。在这里,为三个菜单项定义了相应的加速键,它们是:Ctrl+L、Ctrl+R、Ctrl+E。图6.4定义加速键返回6.3使用位图、图标和光标位图、图标和光标是应用程序中非常重要的资源,程序员可以自己在图形编辑器中创建这几个资源,也可以从其他程序中导入或者把它们导出作为文件保存。6.3.1创建位图6.3.2创建图标和光标6.3.1创建位图为了创建位图,在资源视图中右击,选择弹出菜单选项【添加资源】,在添加资源对话框中双击Bitmap图标,即可以编辑位图,同时位图的ID默认设为IDB_BITMAP1,用户可以自己修改为合适的名称。其图形编辑器窗口如图6.5所示。返回图6.5图形编辑器窗口返回6.3.2创建图标和光标图标和光标的创建与位图基本上相同,但是图标和光标有不同的属性。例如,对于不同的显示设备,每个图标或光标可以包含不同的图像。此外,光标还具有热点(hotspot)——Windows使用热点来跟踪光标位置。在VisualC++.NET里面用【设置作用点工具】(图形工具栏上倒数第二个按钮)来设置光标的热点。在创建新的图标或光标时,图像编辑器首先创建VGA图像。返回6.4使用对话框对话框是一种重要的Windows资源,用来显示并从用户那里获取信息。可以用对话框编辑器来创建或者编辑对话框资源和对话框模板。要在程序中插入对话框,先打开工程(本例为Jiao6_1),再打开资源视图,在资源视图中右击Dialog选项,选择弹出式对话框中的插入Dialog,即可插入一个对话框资源到应用程序中,如图6.9所示。图6.9插入一个对话框资源到应用程序中返回6.5使用字符串表字符串表是一种Windows资源,它包含应用程序中用到的所有字符串的ID号码、值和标题。例如,状态栏提示可以放在字符串表中。每个应用程序只能有一个字符串表。在字符串表中,通常,每个字符串只在使用时才调入内存。字符串编辑器用于编辑应用程序的字符串表资源。使用字符串表编辑器可以在字符串表中浏览字符串,向字符串表添加新的字符串,删除某一字符串,将字符串从某一资源文件移到另一资源文件,修改字符串及其标识符ID等。图6.16是工程Jiao6-1的字符串资源编辑器。图6.16字符串资源编辑器返回6.6使用版本信息版本信息主要由公司名称、产品标志、产品版本号、版权和商标注册等信息组成。版本信息编辑器是用于编辑和维护版本信息的工具。尽管版本信息不是应用程序所必需的,但它是标志应用程序的有效手段。每个应用程序中只能有一个版本信息资源,其名称ID为VS_VERSION_INFO。如果要在应用程序中访问版本信息,必须在应用程序中调用函数GetFileVersionInfo和VerQueryValue。图6.17所示是上面应用程序Jiao6_1的版本信息资源编辑器。图6.17版本信息资源编辑器返回6.7使用工具栏工具栏通常包含一组工具按钮,通过工具按钮可以快速执行菜单栏上使用最频繁的命令。系统将每个工具栏保存为相应的位图,其中包含了工具栏上每个工具按钮的图像。工具按钮图像具有相同的尺寸,默认是16像素×15像素。工具按钮图像在位图中依次排列,这种排列次序反映了在屏幕上显示时工具按钮在工具栏上的排列次序。每个工具按钮都有相同的状态和风格(被按下的、向上的、向下的、无效的、不确定的)。6.7.1在程序中加入工具栏6.7.2工具条类CToolBar6.7.3工具条的使用6.7.4工具条上按钮的消息处理函数6.7.1在程序中加入工具栏VisualC++.NET本身提供的工具栏编辑器可以用于创建工具栏资源,并可以将已有的位图转换为工具栏资源。工具栏编辑器以图形方式显示要处理的工具栏及正被选择的工具栏按钮图像。工具栏编辑器用两个视图来显示被编辑的按钮图像,视图间使用分割条来分隔,被编辑按钮图像的上面是要处理的工具栏,工具栏由模糊边界包围的是当前正被选择的按钮。创建新的工具栏有两种方法:一是直接创建,二是将已有的位图转换为工具栏。返回6.7.2工具条类CToolBarMFC用CToolBar类表示工具条类,其功能包括工具条的创建、按钮风格和尺寸的设置、工具条属性的检取等功能。CToolBar类定义了默认的构造函数、Create()、LoadBitmap()、SetButtons()、SetButtonInfo()、LoadToolBar()等成员函数来完成工具栏的创建和使用的。返回6.7.4工具条上按钮的消息处理函数与菜单消息类似,工具条上按钮可以产生的主要消息包括两条,即工具按钮按下时的消息和按下后按钮状态更新的消息。返回6.8使用状态条状态条是有一排文本输出窗格(窗格就是状态条上可显示文本的小窗口)的控制条,使用这些文本输出窗格的方式一般有两种:●作为信息行信息行窗格中所显示的是程序动态提供的字符串,为了对信息行内容进行设置,必须首先访问状态条对象,然后再用一个从0开始的索引参数来调用CStatusBar类的SetPanelText成员函数,其中索引为0通常就是访问信息行。●作为状态指示器像CAP、NUM和SCRL指示器等一样,状态指示器总是与一个字符串相连,该字符串是由一个字符串资源ID来识别的,该ID也被用来传递更新命令,通常可以通过字符串或命令ID来访问状态指示器。6.9鼠标和键盘消息处理函数的使用6.9.1基本知识6.9.2鼠标消息及其映射函数6.9.3鼠标捕捉6.9.4改变鼠标的光标类型6.9.5键盘消息及其映射函数6.9.6字符消息及其映射函数6.9.1基本知识鼠标是一种定位输入设备,通常有两个键(左键、右键)或三个键(左键、中键、右键),鼠标的操作主要有以下三种基本方式:●单击:迅速按下并释放键。●双击:连续迅速地按下和放开键两次。●移动:移动鼠标的位置。返回6.9.2鼠标消息及其映射函数对于一个典型的窗口,用于输出文档的区域我们称之为窗口的客户区,而非客户区是指标题栏、菜单栏、滚动条、边框等所占据的窗口区域。Windows为鼠标定义了10个客户区鼠标消息,11个非客户区鼠标消息。对于非客户区消息,应用程序一般不做处理,而是交给Windows来处理,应用程序只需要处理客户区消息。返回6.9.3鼠标捕捉通常情况下,只有当鼠标光标位于某一窗口的客户区或非客户区时,该窗口的窗口函数才能接收到鼠标消息。但是由于鼠标的随机性,难以保证光标始终不离开某一窗口。如果要使某个窗口能不间断地捕获鼠标消息,就必须对鼠标加以捕捉,从而使Windows发送的所有鼠标消息全部定向到某一窗口,而不管鼠标光标位于何处。调用SetCapture()函数可以实现此窗口对鼠标的捕捉,调用格式为:CWnd::SetCapture();一旦某窗口捕捉了鼠标,其他的窗口无法得到鼠标消息。因此,当该窗口不再需要捕获所有的鼠标消息时,应及时调用ReleaseCapture()函数以释放鼠标,以便其他窗口可以正常地接收鼠标消息。释放鼠标函数的调用格式为:CWnd::ReleaseCapture();返回6.9.4改变鼠标的光标类型当鼠标光标通过某个特定控件时,为了给用户提供一些有帮助的反馈信息,需要改变光标的类型给用户以提示。如当鼠标在对话框中移到Help按钮上时,需要显示成问号光标。改变鼠标的形状,可以通过响应消息WM_SETCURSOR来实现。当光

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功