VC实验报告3.docx
《VC实验报告3.docx》由会员分享,可在线阅读,更多相关《VC实验报告3.docx(15页珍藏版)》请在冰点文库上搜索。
VC实验报告3
华北电力大学实验报告
院/系:
电子与通信工程系课程名称:
vc++程序设计日期:
专业
通信工程
学号
201203010132
班级
1201
姓名
郑明威
实验名称
基于对话框的编程
成绩
评定
教师
签名
实验
环境
Windows2000,VisualC++6.0
实验目的
及实验要求
目的:
1、了解AppWizard生成的对话框风格应用程序框架
2、掌握利用VC的MFC类库设计面向对象应用程序的过程
3、学习对话框类的设计方法
4、掌握对话框编程的DDV/DDX机制
5、掌握基本控件和通用对话框的程序设计方法
要求:
编写一个基于对话框的应用程序,实现简单的计算器功能。
实
验
原
理
1. 每个MFC应用程序都包含如下6个部分。
从CWinApp派生一个新类作为该应用程序的程序类,这个类应该重载InitInstance()函数。
将该应用程序类声明为全局变量,CWinApp的构造函数将自动调用InitInstance()函数。
从CFrameWnd(或CMDIFrameWnd或CMINIFrameWnd)派生一个类作为屏幕上的主窗口。
创建该窗口的InitInstacne()函数。
创建该窗口的构造函数。
创建该窗口的析构函数。
2.对话框是Windows应用程序中一种常用的资源,其主要功能是输出信息和接收用户的输入数据。
控件是嵌入在对话框中或其它父窗口中的一个特殊的小窗口,它用于完成不同的输入、输出功能。
对话框与控件关系密切,在每个对话框上一般都有一些控件,对话框依靠这些控件与用户进行信息的交互。
在MFC中,对话框的功能被封装在CDialog类中,而CDialog类是CWnd类的派生类。
作为窗口,对话框和其它窗口一样具有窗口的一切功能。
3.基于对话框的应用程序
可以直接利用MFC AppWizard向导创建一个基于对话框的应用程序,这种程序运行后首先出现一个对话框。
在向导的第一步选择Dialog Based项。
此时,应用程序向导将出现与单文档和多文档程序向导不同的操作步骤,因为对话框应用程序一般不包含文档,故不支持数据库和复合文档。
按照对话框应用程序向导提示的步骤进行操作就得到一个对话框应用程序项目,出现对话框编辑器和控件工具栏浮动窗口,它们采用的是一种所见即所得的可视化工作方式。
利用向导创建应用程序的框架后,程序员可根据程序具体功能要求添加代码。
实
验
过
程
或
实
验
主
要
程
序
要求:
编写一个基于对话框的应用程序,实现简单的计算器功能。
1、设计服务器端对话框界面
2、添加控件及关联的成员变量,修改各控件属性
3、添加CEditCalc类
4、添加相应函数
BOOLCCalcDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
voidCCalcDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
BtnClicked("1");
}
实
验
过
程
或
实
验
主
要
程
序
voidCCalcDlg:
:
OnButton2()
{
BtnClicked("2");
}
voidCCalcDlg:
:
OnButton3()
{
BtnClicked("3");
}
voidCCalcDlg:
:
OnButton4()
{
BtnClicked("4");
}
voidCCalcDlg:
:
OnButton5()
{
BtnClicked("5");
}
voidCCalcDlg:
:
OnButton6()
{
BtnClicked("6");
}
voidCCalcDlg:
:
OnButton7()
{
BtnClicked("7");
}
voidCCalcDlg:
:
OnButton8()
{
BtnClicked("8");
}
voidCCalcDlg:
:
OnButton9()
{
BtnClicked("9");
}
voidCCalcDlg:
:
OnButton0()
{
BtnClicked("0");
}
voidCCalcDlg:
:
OnButtonDot()
{InitInputValue();
CStringtemp;
temp=m_strValue;
if(temp.Find('.')<0)
{m_strValue+=".";
this->UpdateData(FALSE);
m_strOpValue[m_op_nums]=m_strValue;
}}
实
验
过
程
或
实
验
主
要
程
序
voidCCalcDlg:
:
OnButtonNagative()
{
InitInputValue();
if(m_strValue=="0")return;
if(m_strValue[0]!
='-')
{
m_strValue="-"+m_strValue;
}
else
{
m_strValue=m_strValue.Right(m_strValue.GetLength()-1);
}
this->UpdateData(FALSE);
m_strOpValue[m_op_nums]=m_strValue;
}
boolCCalcDlg:
:
stringvalid(CString&strValue)
{
boolbReturn=false;
boolbSign=false;
intnDot,nLen;
CStringstrTemp;
strTemp=strValue;
nLen=strTemp.GetLength();
if(nLen>0)
{
if(strTemp[0]=='-')
{
bSign=true;
strTemp=strTemp.Right(nLen-1);
nLen-=1;
}
CStringstrPlus,strNag;
nDot=strTemp.Find('.',0);
if(nDot>=0)
{
strPlus=strTemp.Left(nDot);
strNag=strTemp.Right(nLen-nDot-1);
}
else
{
strPlus=strTemp;
strNag="";
}
strPlus.TrimLeft('0');
if(strPlus.IsEmpty())strPlus+='0';
strValue=strPlus;
if(!
strNag.IsEmpty())strValue+='.'+strNag;
}
else
{
strValue="0";
}
if(bSign)strValue='-'+strValue;
returnbReturn;
}
voidCCalcDlg:
:
OnButtonPlus()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(m_strOpValue[1].IsEmpty())
{
m_op=1;
m_strOpValue[0]=m_strValue;
m_op_nums=1;
}
else
{
Calc();
m_op_nums=1;
m_strOpValue[0]=m_strValue;
m_strOpValue[1]="";
m_op=1;
}
m_inputnew=true;
}
voidCCalcDlg:
:
OnButtonSub()
{
if(m_strOpValue[1].IsEmpty())
{
m_op=2;
m_strOpValue[0]=m_strValue;
m_op_nums=1;
}
else
{Calc();
m_op_nums=1;
m_strOpValue[0]=m_strValue;
m_strOpValue[1]="";
m_op=2;
}
m_inputnew=true;
}
voidCCalcDlg:
:
OnButtonMul()
{
if(m_strOpValue[1].IsEmpty())
{
m_op=3;
m_strOpValue[0]=m_strValue;
m_op_nums=1;
}
else
{
Calc();
m_op_nums=1;
m_strOpValue[0]=m_strValue;
m_strOpValue[1]="";
m_op=3;
}
m_inputnew=true;
}
voidCCalcDlg:
:
OnButtonDiv()
{
if(m_strOpValue[1].IsEmpty())
{
m_op=4;
m_strOpValue[0]=m_strValue;
m_op_nums=1;
}
else
{
Calc();
m_op_nums=1;
m_strOpValue[0]=m_strValue;
m_strOpValue[1]="";
m_op=4;
}
m_inputnew=true;
}
voidCCalcDlg:
:
OnButtonBack()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringtemp;
temp=m_strValue;
temp=temp.Left(temp.GetLength()-1);
stringvalid(temp);
m_strValue=temp;
this->UpdateData(FALSE);
}
voidCCalcDlg:
:
OnButtonCancel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
Reset();
}
voidCCalcDlg:
:
OnButtonEqual()
{
if(m_op!
=0)
{
if(m_strOpValue[1].IsEmpty())
{
m_strOpValue[1]=m_strValue;
}
Calc();
m_op_nums=1;
m_op=0;
m_strOpValue[0]=m_strValue;
m_strOpValue[1]="";
m_inputnew=true;
}
}
voidCCalcDlg:
:
BtnClicked(CStringstrKey)
{
InitInputValue();
CStringtemp;
temp=m_strValue+strKey;
stringvalid(temp);
m_strValue=temp;
this->UpdateData(FALSE);
m_strOpValue[m_op_nums]=m_strValue;
}
voidCCalcDlg:
:
Reset()
{
m_op=0;
m_strValue="0";
m_op_nums=0;
m_strOpValue[0]="";
m_strOpValue[1]="";
this->m_inputnew=true;
this->UpdateData(FALSE);
}
voidCCalcDlg:
:
InitInputValue()
{
if(this->m_inputnew)
{
m_strValue="0";
m_inputnew=false;
}
}
boolCCalcDlg:
:
Calc()
{
boolbReturn=true;
doubledValue,dValue1,dValue2;
switch(m_op)
{
case0:
bReturn=false;
break;
case1:
dValue1=m_strOpValue[0].IsEmpty()?
0.:
atof(m_strOpValue[0]);
dValue2=m_strOpValue[1].IsEmpty()?
0.:
atof(m_strOpValue[1]);
dValue=dValue1+dValue2;
m_strValue.Format("%f",dValue);
m_strValue.TrimRight('0');
m_strValue.TrimRight('.');
this->UpdateData(FALSE);
break;
case2:
dValue1=m_strOpValue[0].IsEmpty()?
0.:
atof(m_strOpValue[0]);
dValue2=m_strOpValue[1].IsEmpty()?
0.:
atof(m_strOpValue[1]);
dValue=dValue1-dValue2;
m_strValue.Format("%f",dValue);
m_strValue.TrimRight('0');
m_strValue.TrimRight('.');
this->UpdateData(FALSE);
break;
case3:
dValue1=m_strOpValue[0].IsEmpty()?
0.:
atof(m_strOpValue[0]);
dValue2=m_strOpValue[1].IsEmpty()?
0.:
atof(m_strOpValue[1]);
dValue=dValue1*dValue2;
m_strValue.Format("%f",dValue);
m_strValue.TrimRight('0');
m_strValue.TrimRight('.');
this->UpdateData(FALSE);
break;
case4:
dValue1=m_strOpValue[0].IsEmpty()?
0.:
atof(m_strOpValue[0]);
dValue2=m_strOpValue[1].IsEmpty()?
0.:
atof(m_strOpValue[1]);
if(dValue2==0.)
{
bReturn=false;
break;
}
dValue=dValue1/dValue2;
m_strValue.Format("%f",dValue);
m_strValue.TrimRight('0');
m_strValue.TrimRight('.');
this->UpdateData(FALSE);
break;
}
returnbReturn;
}
实
验
结
果
及
分
析
1+15=16
收
获
与
体
会
感谢老师的悉心指导。
通过实验,我了解了AppWizard生成的对话框风格应用程序框架,掌握了利用VC的MFC类库设计面向对象应用程序的过程,也学到对话框类的设计方法,
掌握对话框编程的DDV/DDX机制,同时掌握基本控件和通用对话框的程序设计方法对知识有了更深入的理解,让我获益匪浅。