基于MFC对话框的多功能程序设计
摘要 利用MFC类库提供的大量预先编写好的类及支持代码,在预先建立好的
框架上,通过建立类向导逐个链接新的对话框,分别用来实现计算、文本编辑、绘图、信息管理及多媒体等功能。
关键词 MFC、计算、文本编辑、绘图、信息管理、多媒体 1. C++应用程序功能 (1) 计算程序功能
① 计算器:点击数字及字符按钮实现整数及小数的加减乘除和求根运算。编辑框显示输入的数字及运算结果,“AC”按钮清除计算结果和历史记录。
② 求阶乘:滑动滑块或者点击滚动条两端的按钮求得1至15的阶乘
③ 求一元二次方程的根:输入a,b,c三个系数,点击计算,显示两个根(包括虚根)。
④ 点击一下:点击客户区内的区域,客户区的左上方显示该点的X,Y坐标。 ⑤ 素数,水仙花数的判定及求最大公约数和最小公倍数:输入任意数字,单击判定按钮在只读编辑框中判定是否为素数或水仙花数。单击求解按钮,显示其最大公约数和最小公倍数。
⑥ 温度转换:输入华氏温度和摄氏温度,单击对应的按钮可以进行华氏温
度和摄氏温度的相互转换并在相应的编辑框内显示转换结果。
(2) 文本编辑功能
① 复制粘贴:“copy”按钮用于将输入的字符复制粘贴至编辑框中,“end”
按钮用于退出程序。
② 字符串转换:输入任意字符,程序将其小写字母转换为大写字母,其
他非字母字符转换为“*”并能同步在只读编辑框中显示转换结果。 ③ 文字居中及改变字体:将文字初始化为“同舟共济 自强不息”,不
1
论如何改变窗口大小,文字始终位于窗口中央。单击客户区弹出一个对话框,用于改变字体、字形、大小、颜色等。单击确定后,显示效果。
(3) 绘图功能
① 基本图形与填充图形:通过选择菜单依次显示红、绿、蓝三种颜色
的直线,矩形和圆。利用画笔画刷工具分别显示粗细不同的红色直线及填充了绿色方格的圆。
② Sin曲线:中心有2个垂直的坐标轴,显示Sin曲线图。
③ 左右开弓与吹泡泡:左击画任意直线,右击画固定半径的圆。吹泡泡
可选择颜色显示任意半径的圆。
(4) 信息管理功能
① 改变数据列表:对数据进行添加,删除,修改等操作。修改时,先选
中需要修改的数据,在编辑框中修改,点击“修改确认”即可完成修改。 ② 品牌及数量:选择品牌并输入数量,点击确定弹出信息录入的对话框。 ③ 录入职称,爱好,个人信息及录入成绩:对编辑框,单选,复选,
组合框,滚动条等控件进行操作,点击确定弹出信息录入后的对话框。输入成绩,点击“OK”显示浮点类型的平均成绩和总分。
(5) 多媒体功能
① 动起来及听听看看:分别对多种格式的音频文件和Flash文件进行播
放,暂停,终止,前进,后退,快进,后退,跳转至任意帧等操作。 ② 蝴蝶飞舞:基于定时器的Flash动画,单击客户区,蝴蝶动起来。
(6) 其他
① 显示时间和日期:点击复选框,可选择性地显示当前的时间和日期。 ② 试试手气:单击客户区,在弹出的对话框中选择目录打开任意图片。 2. C++应用程序设计思想及设计过程
2
(1) 设计思想:
基于所学的知识,为了实现计算,文本编辑,绘图,信息管理及多媒体多种功能,我选择建立一个单文档类型的应用程序,通过添加对话框为不同的功能设计界面并建立新类,最后利用菜单将整合所有功能,构成了程序设计的核心。
为了增加程序的互动性,通过老师的指导加之阅读相关资料,我设计了利用对话框一个欢迎界面和一个登陆界面,并让其在单文档界面之前显示。
程序的主体部分完工之后,我想为单文档界面单调的客户区增添一点美感,借鉴之前绘图和插入位图的经验,我为客户区设计了带有自己名字的漂亮背景。
(2) 设计过程:
① 新建一个单文档类型项目工程
? 选择“文件|新建”命令;
? 在“工程”选项卡中,选定“MFC AppWizard(exe)”,输入工程名;选定
“S 单文档”,选择“完成”。
? 打开ResourceView选项卡中的Menu资源;
? 删除菜单中原有的菜单项;在空白菜单处右击修改属性并修改ID名。
② 新建对话框
? 打开ResourceView选项卡中的Dialog资源,右击选择Dialog,新建对
话框并修改其ID名。
? 在对话框界面中添加控件,多媒体控件添加时右击对话框插入ActiveX
控件选择Shockwave Flash Object添加Flash控件,选择Windows Media Player添加音频控件。
? 选择“查看|建立类向导”命令,建立新类;选择Member Variables连
接变量并设置类型和名称;选择Member Maps添加消息函数等。 ? 根据功能编写代码;在类的定义中添加适当类型的成员变量或函数;引
用数学公式时注意在头文件中添加 #include “math.h”。
③ 利用菜单将对话框与单文档链接
? 打开ResourceView选项卡中的Menu资源;
3
? 在菜单处右击建立类向导,确认Class name为CMainFrame ,找到对应
的ID名,在Messages的列表框中双击COMMAND,单击Edit Code; ? 在对应的函数中添加“类名 对象名;对象名.DoModal();”,在头文件中
添加#include “类名.h”。
④ 创建一个欢迎界面
? 用PS处理图片,保存成BMP格式;打开ResourceView选项卡,右击选
择Bitmap引入位图;
? 新建对话框,插入图形控件,右击修改属性为位图,选择位图的ID名。 ? 通过建立类向导添加私有成员及初始化函数并编写代码; ? 在工程App类的InitInstance()中添加“类名 对象名;对象
名.DoModal();”的代码。
⑤ 创建一个登陆界面
? 过程类似于欢迎界面的创建,导入位图资源,新建对话框(密码的编辑
框属性选择密码);
? 在工程App类的InitInstance()中欢迎界面代码的后面添加用于设置用
户名和密码的代码。
⑥ 为客户区添加背景图片
? 用PS处理图片,保存成BMP格式,导入位图资源;
? 通过建立类向导在工程View类中添加WM_EraseBkgnd消息函数,编写代
码。
? 使用LoadBitmap()加载位图,用GetClientRect()获取客户区区域; ? 最后编写pDC->StretchBlt(0, 0, rect.Width(), rect.Height(),
&dcCompatible, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY)完成背景图片的添加。
3. 总结
不同于上学期进行的计算机实践,这次实践中涉及的与MFC有关的知识全都需要我们自己自学并加以运用,而且老师不再全程演示操作,只会对难点进行相应指导。这使得我刚开始操作时只知道搬运代码却不知其所以然,但通过循序渐
4
进的学习,逐步学习对话框,菜单,单文档的设计,尝试用不同控件进行计算,文本编辑,绘图,信息管理及多媒体播放程序设计,慢慢地能够梳理利用MFC类库进行C++程序设计的框架及流程了。在2周的实践中,我收获了不少,也发现了自己在学习过程中的不足,具体如下:
(1) 对C++程序设计有了一个整体的认识:
经过一个学期的C++基础知识的学习,从了解词法,语法,逻辑规则,掌握各种数据类型至对面向对象的程序设计的学习,我从编写零散的自定义函数代码到用类实现多个函数代码的封装到实践期间学会用不同的类实现多功能应用程序设计,慢慢地了解了程序设计发展的过程。
但认识还很模糊,很多细节理解不够透彻,从而在综合设计时会在某一个功能的编码时遇到麻烦或者碰到未曾见过的错误不知如何解决;对综合程序的设计不熟悉,整合的时候容易忘记头文件的声明。
(2) 对类的功能有了更深的了解:
在利用类完成各项功能时,我们不再需要把每个函数的代码完整地写出来,对于类中已封装好的代码,我们只需要引用它们,同时消息函数的存在减少了信息冗余,我深刻地体会到了封装性和多态性给程序设计带来的便利。
但对不同控件对应的类中封装的成员函数了解不深,在引用的时候经常需要查阅资料。这也使得我在设计自定义的功能时不能及时想到可用的函数,不能熟练地编码。
5
相关推荐: