基于MFC的工程软件界面设计
2011-06-05姜明新
徐 璇,姜明新,黄 静,徐 晶,李 敏
(大连民族学院 信息与通信工程学院,辽宁 大连116600)
Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0 的下一代开发工具,代号“Orcas”,是对 Visual Studio 2005一次及时、全面的升级。VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效开发Windows应用程序[1]。
VS2008是一种集成开发环境,提供了MFC类库。MFC(Microsoft Foundation Class Library)是微软公司对大部分标准的Win32 API函数的封装,提供了图形环境应用程序的框架及创建应用程序的组件。
MFC类库是C++语言与Windows的接口,利用MFC编写程序的本质是选择该类库中合适的类,并调用其下相应成员函数来完成某个功能。整体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
VS提供了相应的工具来完成该工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助用户直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;编译,则通过类库实现了应用程序特定的逻辑[2]。
1 对话框
1.1 概述
对话框主要由两部分组成:对话框资源和对话框类。对话框资源:可以使用对话框编辑器来配置对话框的界面,如对话框的大小、位置、样式,对话框中控件的类型和位置等;对话框类:在MFC程序中,可以使用向导帮助用户建立一个与对话框资源相关联的类,通常这个类由CDialog类派生。
Windows应用程序工作的基本流程是从用户那里得到数据,经过相应的处理之后,再把处理结果输出到屏幕,这就需要用到一个很重要的用户接口——对话框,即一个可以接收消息、被移动或关闭的窗口。
对话框有两种类型,模态对话框和非模态对话框。模态对话框是指当其显示时,程序会暂停执行,直到关闭这个对话框才能继续执行任务;而非模态对话框显示时,允许转而执行程序中的其他任务。基于此特点,选择建立一个非模态对话框。
1.2 对话框的建立
首先新建一个基于对话框类型的MFC AppWizard工程,命名为 “心电工作站”。然后使用build命令生成命令程序并执行。创建一个非模态对话框,则需要利用CDialog类的Creat成员函数[2]。该函数具有以下两种形式的声明:
2MFC的程序控制设计——心电工作站
2.1 MFC程序执行流程
在MFC程序当中是一系列派生类的声明和定义以及一个由CWinApp类派生而来的类全局对象。调用完CWinApp的构造函数后由连接器向程序内自动链接的AfxWinMain函数调用,可以当做MFC的程序入口函数。之后AfxWinMain函数调用成员函数。在程序的运行过程当中,由操作系统源源不断地发送消息给应用程序,由消息循环处理并且分发给相关的窗口对象的DefWindowProc成员函数。消息运行结束后,用户按下关闭按钮后,操作系统向程序发送WM_CLOSE消息,应用程序接收到这个消息以后的默认操作是调用PostQuitMessage函数,由这个函数发送WM_QUIT消息。当程序对象接收到WM_QUIT消息后消息循环结束,由AfxWinMain函数调用AfxTerm函数清理程序使用过的资源并且结束整个程序[3]。
2.2 给对话框添加背景
首先将选择为背景的.bmp图片导入工程,资源视图里面右键点击工程文件夹→选择 “添加资源”→位图→选择需要导入的位图图片。用下面的代码将位图加载为对话框的背景[4]。
2.3 子对话框的制作
完成主对话框的创建和显示后,需要对子对话框进行制作,使其实现对应按钮的功能。这些功能可以由MFC工具箱提供的控件来完成。
控件是独立的小部件,是现成的程序组件,可独立运行并完成一定的功能。控件的外观和功能由其属性规定。所有的控件都是由CWnd类派生的类对象,每个控件均有一个标识符 (ID),程序中可通过对这个标识符对应的控件进行操作。控件的种类很多,如图显示了一些基本控件以及应用控件制作的子对话框[5]。
图1 基本控件说明Fig.1 Description of the basic space
图2 子对话框显示Fig.2 Display of sub-dialog box
2.4 通过按钮调用子对话框
在MFC中,对资源的操作通常都是通过一个与资源相关的类来完成的。对话框资源也有一个相应的基类。因此首先需要创建一个类与要调用的子对话框相关联(或者也可以选择程序中已有的一个类与之相关联)[5]。实现代码如下:
2.5 给按钮加载位图
用与添加对话框背景图片的形式将按钮的背景位图导入资源视图里,然后通过下面的代码给按钮添加背景图片:
2.6 界面样板设计
以上各节所述的是实现界面可视化的核心与基础,搭建了界面的可视化模块平台。通过绘图工具、PS图像整合、界面模板修正定位等系列软件,制作出界面的应用图片,依照程序及MFC界面实现的不同功能进行图片的反复定位[6]。
各软件中的颜色定位都是以RGB为模板,以适应电子设备的图像输出。通过对RGB色差的调整,达到理想的界面颜色设置。开始对图像进行二值显示,只有黑白色调,来对界面的整体布局进行把握和评定。接着对部分的图片进行灰度处理,最后呈现出RGB的真彩色图像。界面图像的细节部分进行放大后将出现明显的失真现象,对于缓变图像进行细量化粗采样以避免虚假轮廓,对于细节丰富图像进行细采样粗量化以避免模糊。通过以上的基础工作,整合实现了心电工作站界面样板设计。
图3 心电工作站界面Fig.3 Interface of ECG workstation
图4 车辆违停检测界面Fig.4 Interface of vehicle violations stop testing
3 生成可执行文件
为了让程序能在没有安装VS软件的电脑上运行,要对程序进行封装,生成可执行文件。 首先,新建安装部署项目。将界面应用程序的可执行文件和相应的类库和组件添加进来。然后为对应的文件创建快捷方式,并把快捷方式分别复制或剪切到左边的“用户的‘程序’菜单”和“用户桌面”中。这样安装程序安装完成后会在 “开始→所有程序”和“桌面”上生成程序的快捷方式。然后,将属性中的“DefaultLocation”的路径中的“[Manufacturer]”去掉,不然做好的安装程序默认安装目录会是“C:Program Files电脑用户名安装解决方案名称”;最后,打开系统必备页,在“指定系统必备安装组件的位置”中选择下载与界面应用程序相同位置的系统必备组件,便可在安装文件包中包含.NetFramework组件,点击“生成→生成解决方案”。完成上述操作后便可在解决方案文件夹下的Debug文件夹中找到生成的安装文件了。
4 结束语
MFC是C++实现界面可视化设计的核心,配合动态链接库实现界面设计。虽然MFC可能被取代,但MFC是C++语言走向真正实用化,以及研究者实现进一步发展的基础。一个友好美观的界面会带来舒适的视觉享受,拉近距离,创造价值。界面设计不再是单纯的美术绘画,需要定位使用者、使用环境、使用方式并且为最终的需求服务,是纯粹的科学性的艺术设计。文中通过对基于MFC的一系列操作,实现了一个良好的交互平台的设计。随着科学技术和时代的不断发展,界面设计将会步入一个更高的平台。
[1]孙鑫.VC++深入详解[M].北京:电子工业出版社,2006.
[2]温秀梅,丁学钧.Visual C++面向对象程序设计[M].北京:清华大学出版社,2005.
[3]谭浩强.C++面向对象程序设计[M].北京:清华大学出版社,2006.
[4]袁媛.基于MFC类设计ObjectARX应用程序界面[J].中南大学学报,2004,35(3):448-452.YUAN Yuan.MFG sequence-based design for ObjectARX application interface[J].Journal of Central South University,2004,35(3):448-452.
[5]杨刚.基于MFC用户界面设计主、子对话框数据的传递[J].机电产品开发与创新, 2005,18(6):98-99.YANG Gang.Data transfer of Son and Lord dialog box based on theUIofMFC[J].Development& Innovation of Machinery&Electrical Products,2005,18(6):98-99.
[6]杨红军,王金英.基于VC++的多线程通信程序设计[J].电脑知识与技术,2008(29):64.YANG Hong-jun,WANG Jin-ying.On system design of the mult-threaded communication based on VC++[J].Computer Knowledge and Technology,2008(29):64.