拓展体验
窗口程序设计及 MFC 启蒙
【摘要】本文适合已经完整学习了 C++面向对象机制,但在开发窗口程序方面还是零基础的同学。
通过本文的引导进行实践体验,目的是消除同学们开发窗口程序的神秘感,为下一步的自学找到感
觉。同时,能更深入地体会到编程基本功的根源所在,在今后能自觉地学好专业基础课,而不是只
浮躁地追求开发平台和表面的技能。文章最后给出进一步实践的建议。
学习进程已经到了 C++程序设计的尾声。同第一次体验窗口不同,我们已经具备了相当的“经
验”,每 周 3‐5 个任务,近两万行的代码不是白做的。美中不足的是,我们面对的仍然是黑框框(尽
管同学们已经会把黑框框改成各种颜色、字体的彩框框)。我们已经深刻领会了 C++语言中的各种
机制,并且可以将之用于各种应用场合。
现在,我们将再次体验窗口程序设计,看到自定义的类如何参与到实际的项目中来。因为学习
了面向对象程序设计,我们还可以看到利用向导生成的程序原来也是建立在 OOP 的基础的,程序
中对话框、编辑框、按钮等均是 MFC 中例的实例,MFC 中提供的类是可以被用户程序继承来使用
的。这就是软件工程中强调的尽可能利用已有“类库”的最生动的案例。
闲言碎语不讲了,先看这次体验的案例——求三角形的面积。
一、三角形类
第 5 周实验的任务一,我们已经设计过一个比较完整的三角形类,主要代码如下所示(main()
函数和类的 showMessage()成员函数就不写了,这是给黑框框准备的):
classTriangle
{
public:
Triangle(){a=1;b=1;c=1;}//设计默认构造函数,即不指定参数时,默认各边长为;
Triangle(doublex,doubley,doublez){a=x;b=y;c=z;}//使用带参数构造函数,三边长在调用时由实参直接给出
doubleperimeter(void);//计算三角形的周长
doublearea(void);//计算并返回三角形的面积
private:
doublea,b,c;//三边为私有成员数据
};
doubleTriangle::perimeter(void)
{return(a+b+c);
}
doubleTriangle::area(void)
{doubles=(a+b+c)/2;
returnsqrt(s*(s‐a)*(s‐b)*(s‐c));
}
写出这点代码已经是小 case,后面运算符重载、继承、多态、虚函数等真功夫还没用呢!
下面开发窗口版程序。和第一次的体验不同,这次的平台选用 VS2008。、
二、窗口程序的开发
1、新建 MFC 应用程序
选择菜单‐>文件‐>新建,在“项目类型”中选择“MFC”,右边的“模板”中选“MFC 应用程
序”,然后在项目“名称”处为项目命名,如图 1 所示: