第1页 共43页,案例二十六 计算长方形的周长和面积,本案例知识要点 类的设计和使用 对话框的设计使用 菜单的设计和使用 工具栏的设计,第2页 共43页,一、案例需求,案例描述 提供对话框,如图所示,输入长方形长和宽的值,计算周长和面积并显示结果第3页 共43页,长方形的长和宽输入对话框,第4页 共43页,,案例效果图 案例效果如图所示案例效果图,第5页 共43页,,功能说明 定义一个输入长方形长和宽的对话框 在屏幕上输出运算结果第6页 共43页,二、案例分析,本案例主要讲解如何使用MFC环境来编译C++程序,如何定义输入对话框以及如何输出运算结果根据案例需求,需要利用MFC环境定义一个菜单、一个输入对话框类,提供长和宽的输入界面;另外定义了一个Rect类,在Rect类中定义了数据成员——长度和宽度;定义了成员函数——长度和宽度的输入函数、计算周长的函数、计算面积的函数最后在视图区通过类对象输出周长和面积第7页 共43页,三、案例设计,类的设计 基于上述分析,本案例需要设计一个类Rect,其结构如图所示Rect类图,第8页 共43页,,(1)数据成员int length;长方形的长度。
int width;长方形的宽度第9页 共43页,,(2)函数成员void input();输入长方形的长和宽double circum();计算长方形的周长double area();计算长方形的面积第10页 共43页,,在类视图ClassView中右击Example1 classes选项,在弹出的快捷菜单中选择New Class命令,弹出“新建类”对话框,在“类的类型”下拉列表框中选择普通类Generic Class,在“类信息”选项区域中的“名称”文本框中输入类名Rect,单击【确定】按钮第11页 共43页,,完成后在类视图ClassView中出现了类Rect,双击该类名,可以看到在Rect.h文件中已经出现了该类的声明,如图所示可以看到该类中只有构造函数Rect()和析构函数~Rect()下面添加成员函数和变量成员的声明第12页 共43页,新类添加结果,第13页 共43页,,在文件视图中的Header Files目录下找到Rect.h文件并双击打开,添加成员函数circum()和area()的声明 在文件视图的Source Files目录下找到Rect.cpp文件并双击打开,可以看到构造函数和析构函数的定义已经存在,在其下添加成员函数input()、circum()和area()的定义,其中input()函数中使用了输入对话框类,因此使用了#include “Inputdlg.h“命令,将对话框类包含进来。
第14页 共43页,,2.对话框的设计 在资源视图ResourceView中右击Dialog选项,选择Insert Dialog命令,在对话框内添加静态文本框Static Text和文本框Edit Box控件并修改属性,上面的Edit控件的ID为IDC_EDIT1,下面的Edit控件的ID为IDC_EDIT2,对话框的设计结果如图所示第15页 共43页,对话框设计结果,第16页 共43页,,双击对话框,弹出Adding a Class对话框,保持默认值添加一个新类Creat a new class,单击【OK】按钮在如图所示的对话框中填写对话框类名,单击【OK】按钮 在“查看”菜单下选择ClassWizard命令,在打开的对话框中单击Member Variable标签,单击【Add Variable】按钮,出现添加成员变量的Add Member Variable对话框,按照图示修改成员变量的名称和类型其中IDC_EDIT1的成员变量名为m_l,类型为int,代表长方形的长度;IDC_EDIT2的成员变量名为m_w,类型为int,代表长方形的宽度单击【OK】按钮退出设计结果如图所示第17页 共43页,对话框类成员变量的设计结果,第18页 共43页,,3.菜单设计 在资源视图ResourceView中单击Menu目录,双击IDR_MAINFRAME选项,修改命令,结果如图设置命令Rectangle的ID为ID_MENURectangle。
第19页 共43页,设计菜单,第20页 共43页,,从“查看”菜单中打开类向导MFC ClassWizard对话框,在Object Ids列表框中选择ID_MENURectangle选项,在Class name下拉列表框中选择CExample1View选项,在Message列表框中选择COMMAND选项后,单击【Add function】按钮,弹出对话框,默认菜单成员函数的名称为“OnMENURectangle()”第21页 共43页,,在对话框中单击【OK】按钮,则在Member functions列表框中添加了成员函数,该函数是CExample1View类的成员函数,单击【Edit Code】按钮可以对函数进行编辑第22页 共43页,,4.工具栏的设计 在资源视图ResouceView中,双击Toolbar目录下的IDR_MAINFRAME选项,修改工具栏如图 所示其中第一个图标代表“退出”,其ID等于“文件”子菜单“退出”的ID,即ID_APP_EXIT;第二个图标代表“所得税”,其ID等于“案例”子菜单Tax的ID,即ID_MENUTax;第三个图标代表“关于”,其ID等于“帮助”子菜单“开发人员”的ID,即ID_APP_ABOUT。
工具栏的设计,第23页 共43页,四、案例实现,,,第24页 共43页,,第25页 共43页,,第26页 共43页,,第27页 共43页,,第28页 共43页,,,第29页 共43页,,第30页 共43页,,第31页 共43页,,第32页 共43页,,,第33页 共43页,,第34页 共43页,,第35页 共43页,,第36页 共43页,,第37页 共43页,,第38页 共43页,,第39页 共43页,,第40页 共43页,,第41页 共43页,,,第42页 共43页,五、案例总结与提高,本案例主要讲解如何使用Visual C++的MFC环境来编译C++程序,这与前面学过的使用C++ Source File和Win32 Console Application环境来编译有很大的不同本案例的特点在于自定义了Rect类,并且利用MFC环境定义了输入对话框类,最后在视图区通过类对象输出了周长和面积 案例总结 不同类之间可以通过include宏命令来包含例如,本案例的Rect.cpp文件包含了Inputdlg.h,这样,在Rect类的input()函数中就可以使用对话框中输入的长度和宽度参数了本案例的Example1View.cpp使用了 #include “Rect.h“命令,所以在菜单函数中能定义类对象。
如果不定义input()函数,因为length和width是private成员变量,不能在类外访问 文字的输出在视图中,所以在Example1View.cpp文件中定义了菜单函数第43页 共43页,,案例提高 请修改本案例菜单的子菜单为:输入参数、计算周长、计算面积,然后修改程序 本案例输入对话框的长度和宽度的默认值是“0”,请修改为“10”。