第菜单和框架窗口_第1页
第菜单和框架窗口_第2页
第菜单和框架窗口_第3页
第菜单和框架窗口_第4页
第菜单和框架窗口_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

会计学1第菜单和框架窗口9.2Windows菜单和MFC菜单编辑器菜单是Windows程序设计中一项重要的界面元素。通常,开发者可以为主窗口定义一个默认的菜单资源,当应用程序创建窗口时,该默认的菜单会被自动装入。也可以定义一个与窗口无关的菜单资源,当调用一些消息函数时,可以自动调入,如鼠标右键的浮动菜单。菜单资源的设计定义了菜单的初始形态。菜单可以为不可选择状态(灰色),也可以有复选框标记,菜单之间可以使用“组”的概念,为了直观,不同的“组”可以由分割线来分割,也可以有多层弹出式菜单。如图所示,该图所示就是一个Windows应用程序的菜单。Windows应用程序菜单

第1页/共23页9.3Windows应用程序的快捷键一般而言,除非是娱乐性地使用软件,如电子游戏、音频视频点播,大多数应用程序应用使用键盘的频率都大于使用鼠标,如文档录入,报表管理等,键盘加速键可以让工作者始终都使用键盘,而不用反复在键盘和鼠标之间进行切换而浪费使用应用软件的文职工作者的时间键盘加速键的编辑是在资源编辑框中的键盘加速键资源中,如图所示。键盘加速键资源编辑器

第2页/共23页9.4命令处理的使用Windows应用程序设计是基于消息处理的,Windows操作系统管理着一个消息队列,这个消息队列根据各种加权因子确定排队次序,各种加权因子是:等待时间。消息优先级别。是否有特殊优先权限。而MFC应用程序框架中,大多数命令消息都来自于应用程序框架,但应用程序框架并没有对这些消息进行处理,因此开发者要自主添加消息处理函数并且在消息处理函数的实现方面做一些工作。这样是不是说明MFC没有对消息处理做贡献呢?不对,MFC对消息处理函数做的贡献主要在于有一个命令传递系统,通过这个复杂的命令传递系统,一方面减少了开发者梳理这些烦杂的消息的开发工作量,另一方面,也几乎可以在程序中的任何地方对消息进行控制。第3页/共23页9.5复文本编辑Windows有两种文本编辑控件:普通的编辑控件和复文本编辑通用控件。MFC提供了CEditView类和CRichEditView类,以支持复文本的功能。第4页/共23页9.5.1编辑视图类:CEditView类CEditView类是基于Windows的编辑控件,因此它具有所有编辑控件的特性,编辑控件的一般特点如下:文本不能超过64KB。不能设置混合字体。实现了剪贴板的剪切、复制和粘贴功能。第5页/共23页9.5.2复文本编辑视图类:CRichEditView类CRichEditView类是复文本编辑控件所使用的类,它的特点是:支持大数量的文本数据。支持多种混合字体。具有普通编辑控件的一般性特点。第6页/共23页9.5.3复文本编辑控件类:CRichEditCtrl类CRichEditCtrl类是一个复文本控件类,开发者可以使用该控件类来进行开发一个功能简单的文本编辑器。该控件常用的函数有:Create():创建复文本编辑控件的无模式对话框窗口。SetWindowPos():设置编辑窗口的大小和位置。GetWindowText():获取控件的文本(纯文本,不带格式)。SetWindowText():设置控件的文本。GetModify():获得一个标记,判断是否被修改。SetModify():设置修改标记。GetSel():获取用户是否选取了文本的标记。SetDefaultCharFormat():设置控件的默认格式。SetSelectionCharFormat():设置选中的文本的格式。第7页/共23页9.6实例7.1-快捷键和文本编辑使用本节的实例是快捷键和复文本编辑控件的使用,读者在进行实例练习时,可以学习到菜单和减速见时如何被传递到文本和视图中的。第8页/共23页9.6.1基本框架和界面实现实例创建步骤如下:(1)单击“File”菜单,选中“New”命令,新建VC项目。(2)创建MFC应用程序项目,并命名为“ExEdit”。(3)创建“单文档”的MFC应用程序项目,应用程序向导的其余选项默认,单击“Finish”按钮完成应用程序向导并生成应用程序框架。(4)新增菜单项,并将菜单项命名为如表所示。(5)创建“更改字体”菜单项的弹出选项卡对话框。菜单命名和作用菜单名称ID作用更改字体ID_ZITI更改字体、颜色和大小等属性获取文本ID_HUOQU获取内存中的文本存储文本ID_STORE存储当前控件的文本第9页/共23页9.6.2快捷键设计设置快捷键也是软件开发项目中的重要工作。快捷键添加列表

第10页/共23页9.6.3存储和显示文档类中的文本为菜单项添加命令消息函数,如表所示。添加命令消息函数ID消息成员函数ID_HUOQUCOMMANDOnHuoqu()ID_STORECOMMANDOnStore()ID_STOREUPDATE_COMMAND_UIOnUpdateStore()第11页/共23页9.6.4选项卡对话框的设计本小节是介绍选项卡菜单的制作。(1)应该为IDD_DIALOG1对话框创建类,单击“Insert”菜单,选中“NewClass”选项,在弹出的对话框中新建一个与IDD_DIALOG1关联的C++类,如图所示。(2)将这些类连接起来,合并成为一个选项卡页。

创建与IDD_DIALOG1对话框关联的类 字体属性选项卡对话框效果图

第12页/共23页9.6.5视图类的功能实现编写视图类的代码,使之完成显示复文本控件的功能。(1)应该在视图类定义中添加一个文本字符串的格式化函数声明:voidFormat(CHARFORMAT&cf);。(2)创建一个视图类的消息处理函数,(3)为视图添加一个父类的指针,在“Page1.cpp”文件中,定义一个全局的指针:CView*g_pView;(4)在视图类中添加相应的WM_USERAPPLY消息处理函数,在“ExEditView.h”文件中,视图类定义中添加公有的消息函数定义如下:afx_msgLRESULTOnUserApply(WPARAMwParam,LPARAMlParam);并在“ExEditView.cpp”源文件中,安装消息映射:ON_MESSAGE(WM_USERAPPLY,OnUserApply)第13页/共23页9.6.6运行效果和实践小结按F5键编译并运行该项目,并且单击“转换”菜单,选中“获取文本”选项,可以得到如图所示的运行效果。读者可以增加控件中的文字,并尝试使用“转换”菜单中的“存储文字”选项,测试一下存储功能,存储之后,删除控件中的文本,使用“获取文本”选项看看显示的内容。读者也可以尝试测试一下字体的变化的功能,先输入若干行的文字,然后选中其中一行,再单击“编辑”,选中“更改字体”选项,修改文字的属性为:斜体+下划线、红色颜色,字体大小为20。执行效果如图所示。

运行效果图 字体属性更改的运行效果

第14页/共23页9.7属性表的开发过程属性表这个概念对读者来说并不陌生,它允许开发者或用户在一个小的对话框里面设置很多分类的信息,这些分类信息可以以列表的形式展现,也可以通过选项卡的方式来让用户选择。在前文中其实已经开发了一个属性表,这个就是选项卡对话框,因此,选项卡对话框形式的属性表创建过程的步骤一般是:(1)创建若干个对话框,用于制作选项卡的子对话框。虽然对话框的大小没有限制,不过为了方便起见,最好在尺寸上不要差别太大。(2)使用ClassWizard为每个对话框生成一个类,这些类可以取类似的名字以表示这些子对话框相互之间的关系,并且,这些类的基类都是CPropertyPage类。(3)生成CPropertySheet类的派生类,并将子对话框类的对象添加到该类中。(4)使用Domal()函数生成属性表的对话框。(5)添加Apply按钮的消息处理函数。第15页/共23页9.8鼠标右键调用的浮动快捷菜单到目前为止,CMenu类是读者没有见过的一个类,通过理解该类名的中文意义,容易知道该类是一个菜单类。该类的对象可以用来表示各种各样的Windows菜单,其中Windows菜单主要包括两类:顶层菜单:该菜单就是主框架窗口的顶级菜单,这个是前文常见的一种菜单。弹出式菜单:这个前文虽然没有提及,不过相信读者在使用各种应用软件时,都使用过弹出菜单,如鼠标右键弹出的菜单列表。第16页/共23页9.9CPersistentFrame持续信息类的使用C++是在C的基础上发展起来的,主要目的就是为了实现“带类的C”,也就是为了定义一套可以进行面向对象设计和研发的高级程序设计语言。因此,C++的一项重要任务是开发一些能够复用的“软件模块”,使软件程序设计的工作也可以变得像硬件研发一样,基于模块的、可复用的工程项目。这种复用是完全没有问题的,如C++自带了STL、还有使用在网络编程方面的C++ACE库等。而状态的复用确实有些困难的,如常使用Windows操作系统的读者可能会发现一个现象:有些应用程序似乎能够记住它们是否倍最小化到任务栏、或者最大化了,或者是非最小化也非最大化,这些状态,即使关闭了这个应用程序,下次打开依然会“记得”。第17页/共23页9.10使用ActivateFrame()成员函数设置窗口尺寸和位置在一个MFC的单文档应用程序中,主框架窗口是视图窗口的“父窗口”,父窗口的创建是先于子窗口的,改变框架窗口尺寸的关键在于CFrameWnd类的ActivateFrame成员函数。如果使用对派生类中的ActivateFrame成员函数进行重载,开发者就可以调用CWnd::SetWindowPlacement函数来设置框架窗口的位置和尺寸,也可以设置控制栏的可视状态,而这些工作都是在框架窗口被显示之前完成的。第18页/共23页9.11创建窗口之前的工作:PreCreateWindow成员函数PreCreateWindow成员函数视在CWnd类层次上声明的,这个函数是提供给开发者在窗口显示之前可以重写的一个虚拟函数,而应用程序框架在调用ActivateFrame成员函数函数之前必须调用PreCreateWindow成员函数。该函数有一个CREATESTRUCT结构作为参数,该结构有两个数据成员:style:风格,如决定窗口是否有边界、是否具有滚动条和是否具有最小化框等。dwExStyle:扩展的风格,一些扩展的风格,如视图总在最前面等。第19页/共23页9.12控制栏状态和Windows注册表在Win16年代,存储软件状态信息一般是使用INI文件,而现在普遍都使用了Win32系统,INI文件还是在使用的,只是微软公司建议开发者少使用INI文件而应该多使用Windows注册表。Windows注册表实际就是一组系统文件,是一种层次数据库,由Windows操作系统管理,让Windows系统和其他应用软件可以在注册表中保存一些永久信息。MFC库提供了两个CFrameWnd成员函数:SaveBarState():存储状态栏信息。LoadBarState():加载状态栏信息。以上的两个函数可以处理应用程序的状态栏和贴边工具栏的大小和位置。第20页/共23页9.13MDI应用程序和持续框架本章所讲述的CPersistentFrame类并不适用于MDI(多文档)应用程序,因为MDI主框架窗口中的ShowWindow函数是由应用程序类的InitInstance成员函数来调用,而没有用

温馨提示

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

评论

0/150

提交评论