实验12.docx
《实验12.docx》由会员分享,可在线阅读,更多相关《实验12.docx(21页珍藏版)》请在冰豆网上搜索。
实验12
实验12 按钮控件、静态控件、编辑框和旋转按钮控件
目的要求
1.熟悉基于对话框程序设计的步骤。
2.熟悉对话框编辑器的使用。
3.掌握按钮控件、静态控件的创建和代码的添加方法。
4.熟悉编辑框控件的创建方式。
实验1按钮控件和静态控件
实验内容
使用应用程序向导创建一个基于对话框的应用程序ButtonTest,界面如图12.1所示,界面上有两组不同的复选框信息,一组单选框信息,提供给用户选择,当用户作出选择后,单击【获取结果】按钮,能在右边的编辑框区域显示出选中的信息。
图12.1程序运行结果
实验步骤
1.启动VisualC++6.0,利用MFC向导建立一个基于对话框的应用程序:
ButtonTest。
2.利用对话框资源编辑器,按图12.1建立程序界面。
在控件工具条上依次将静态组框控件、单选按钮控件、复选按钮控件、编辑框控件拖入对话框界面上合适的位置,原界面上默认按钮IDCANCEL标题改为“取消”,利用Properties属性对话框将IDOK按钮的标题改为“获取结果”,ID号改为IDC_BUTTONSHOW,设置如图12.1所示控件的属性如表12-1。
表12-1 ButtonTest控件属性
控件
ID
标题
属性
静态组框
默认
年龄
默认
静态组框
默认
运动
默认
静态组框
默认
食品
默认
单选按钮
IDC_RADIO1
<20
Group,其它默认
单选按钮
IDC_RADIO2
20-30
默认
单选按钮
IDC_RADIO3
30-40
默认
单选按钮
IDC_RADIO4
>40
默认
复选按钮
IDC_CHECK1
跑步
Group,其它默认
复选按钮
IDC_CHECK2
体操
默认
复选按钮
IDC_CHECK3
游泳
默认
复选按钮
IDC_CHECK4
滑冰
默认
复选按钮
IDC_CHECK5
牛奶
Group,其它默认
复选按钮
IDC_CHECK6
鸡蛋
默认
复选按钮
IDC_CHECK7
面包
默认
复选按钮
IDC_CHECK8
水果
默认
复选按钮
IDC_CHECK9
饮料
默认
编辑框
IDC_EDITSHOW
—
默认
按钮
IDC_BUTTONSHOW
获取结果
默认
3.按组合键Ctrl+W打开ClassWizard类向导对话框,为控件添加成员变量,如图12.2所示。
添加控件变量如表12-2所示。
图12.2ClassWizard类向导对话框
表12-2控件及其关联变量
控件ID号
变量类型
变量名
取值范围
IDC_CHECK1
BOOL
m_A1
——
IDC_CHECK2
BOOL
m_A2
——
IDC_CHECK3
BOOL
m_A3
——
IDC_CHECK4
BOOL
m_A4
——
IDC_CHECK5
BOOL
m_B1
——
IDC_CHECK6
BOOL
m_B2
——
IDC_CHECK7
BOOL
m_B3
——
IDC_CHECK8
BOOL
m_B4
——
IDC_CHECK9
BOOL
m_B5
——
IDC_EDITSHOW
CString
m_result
——
4.双击对话框模板界面上每一个复选按钮,或按组合键Ctrl+W,打开类向导页面添加每个复选按钮的消息响应函数:
如图12.3所示。
图12.3ClassWizard类向导对话框
5.添加的消息响应函数代码如下:
voidCButtonTestDlg:
:
OnCheck1()
{
if(m_A1)
m_A1=false;
elsem_A1=true;
}
voidCButtonTestDlg:
:
OnCheck2()
{
if(m_A2)
m_A2=false;
elsem_A2=true;
}
voidCButtonTestDlg:
:
OnCheck3()
{
if(m_A3)
m_A3=false;
elsem_A3=true;
}
voidCButtonTestDlg:
:
OnCheck4()
{
if(m_A4)
m_A4=false;
elsem_A4=true;
}
voidCButtonTestDlg:
:
OnCheck5()
{
if(m_B1)
m_B1=false;
elsem_B1=true;
}
voidCButtonTestDlg:
:
OnCheck6()
{
if(m_B2)
m_B2=false;
elsem_B2=true;
}
voidCButtonTestDlg:
:
OnCheck7()
{
if(m_B3)
m_B3=false;
elsem_B3=true;
}
voidCButtonTestDlg:
:
OnCheck8()
{
if(m_B4)
m_B4=false;
elsem_B4=true;
}
voidCButtonTestDlg:
:
OnCheck9()
{
if(m_B5)
m_B5=false;
elsem_B5=true;
}
说明:
复选按键的相关变量如m_A取逻辑值true或false代表选中与否的标志。
6.将项目工作区窗口切换到ClassView页面,双击CButtonTestDlg类下的OnInitDialog()函数,添加代码如下:
BOOLCButtonTestDlg:
:
OnInitDialog()
{
…
CheckRadioButton(IDC_RADIO1,IDC_RADIO4,IDC_RADIO1);//设置第1个为选中
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
7.进入ClassWizard页面,在ClassName列表框中选择CButtonTestDlg,在ObjectIDs列表中选择IDC_BUTTONSHOW,在Messages列表中选择BN_CLICKED单击消息。
添加【获取结果】的消息响应函数,添加代码如下:
voidCButtonTestDlg:
:
OnButtonshow()
{
CStringstrCtrl;
m_result="你的年龄:
";
UINTnID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4);
GetDlgItemText(nID,strCtrl);
m_result+=strCtrl+",爱好的运动";
if(m_A1)m_result+="跑步";
if(m_A2)m_result+="体操";
if(m_A3)m_result+="游泳";
if(m_A4)m_result+="滑冰";
m_result+=",爱好的食品";
if(m_B1)m_result+="牛奶";
if(m_B2)m_result+="鸡蛋";
if(m_B3)m_result+="面包";
if(m_B4)m_result+="水果";
if(m_B5)m_result+="饮料";
UpdateData(FALSE);
}
8.程序运行结果如图12.1所示。
写出实验总结及实验报告。
实验2编辑框和旋转按钮控件
实验内容
创建一个基于对话框的应用程序CountTest,如图12.4所示,页面上编辑框用于输入学生的姓名和三门课的成绩,当用户点击【计算平均分】按钮,平均分会显示在相应的编辑框中;点击【计算总分】按钮,总分也显示在相应编辑框中。
图12.4程序运行结果
实验步骤
1.启动VisualC++6.0,利用应用程序向导建立一个基于对话框的应用程序CountTest。
2.打开对话框编辑器,添加编辑框和按钮控件,设计如图12.4所示的界面,调整控件的布局。
各控件属性的设置如表12-3所示。
3.设置显示总分和平均分的编辑框的属性如图12.5所示。
设置编辑框的属性为only-Read,确保在此编辑中只能获取程序内部计算出来的值,而无法被外界更改。
图12.5编辑框的属性
表12-3 CountTest控件属性
控件
ID
标题
静态文本
默认
姓名:
静态文本
默认
VC程序设计
静态文本
默认
英语
静态文本
默认
XML
静态文本
默认
平均分:
静态文本
默认
总分:
编辑框
IDC_NAME
—
编辑框
IDC_SCORE1
—
编辑框
IDC_SCORE2
—
编辑框
IDC_SCORE3
—
编辑框
IDC_AVERAGE
—
编辑框
IDC_SUM
—
旋转按钮
IDC_SPIN1
—
旋转按钮
IDC_SPIN2
—
旋转按钮
IDC_SPIN3
—
按钮
IDC_BUTTONAVE
—
按钮
IDC_BUTTONSUM
—
4.设置旋转按钮属性Autobuddy、Right如图12.6所示。
图12.6旋转按钮属性
5.按组合键Ctrl+W,打开ClassWizard类向导对话框,选中MemberVariables页面,依次为编辑框关联变量,如图12.7所示。
添加后的成员变量见表12-4所示。
图12.7ClassWizard类向导对话框
表12-4 控件及其关联变量
控件ID
类型
变量名
取值范围
IDC_SCORE1
float
m_s1
0.0~100.0
IDC_SCORE2
float
m_s2
0.0~100.0
IDC_SCORE3
float
m_s3
0.0~100.0
IDC_AVERAGE
float
m_ave
—
IDC_SUM
float
m_sum
—
IDC_SPIN1
CSpinButtonCtrl
m_spin1
—
IDC_SPIN2
CSpinButtonCtrl
m_spin1
—
IDC_SPIN3
CSpinButtonCtrl
m_spin1
—
6.将项目工作区窗口切换到ClassView页面,双击CCountTestDlg类下的OnInitDialog()函数,添加代码如下:
BOOLCCountTestDlg:
:
OnInitDialog()
{
…
m_spin1.SetRange(0,100);//设置旋转按钮范围
m_spin2.SetRange(0,100);
m_spin3.SetRange(0,100);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
7.按组合键Ctrl+W,打开类向导对话框,在MessageMaps页面中分别为IDC_SPIN1、IDC_SPIN2、IDC_SPIN3添加UDN_DELTAPOS消息映射函数,并分别添加如下代码:
voidCCountTestDlg:
:
OnDeltaposSpin1(NMHDR*pNMHDR,LRESULT*pResult)
{
NM_UPDOWN*pNMUpDown=(NM_UPDOWN*)pNMHDR;
UpdateData();
m_s1+=(float)pNMUpDown->iDelta*0.5f;
UpdateData(FALSE);
*pResult=0;
}
voidCCountTestDlg:
:
OnDeltaposSpin2(NMHDR*pNMHDR,LRESULT*pResult)
{
NM_UPDOWN*pNMUpDown=(NM_UPDOWN*)pNMHDR;
UpdateData();
m_s2+=(float)pNMUpDown->iDelta*0.5f;
UpdateData(FALSE);
*pResult=0;
}
voidCCountTestDlg:
:
OnDeltaposSpin3(NMHDR*pNMHDR,LRESULT*pResult)
{
NM_UPDOWN*pNMUpDown=(NM_UPDOWN*)pNMHDR;
UpdateData();
m_s3+=(float)pNMUpDown->iDelta*0.5f;
UpdateData(FALSE);
*pResult=0;
}
8.为程序添加消息响应函数
按组合键Ctrl+W,打开类向导对话框,在MessageMaps页面中为两个按钮IDC_BUTTONAVE和IDC_BUTTONSUM添加单击BN_CLICKED的消息响应函数,如图12.8所示。
图12.8消息响应函数对话框
9.添加函数代码
在类向导页面中点击【EditCode】按钮,进入源程序页面,在光标所停的地方添加代码如下:
voidCCountTestDlg:
:
OnButtonave()
{
UpdateData();
m_ave=(m_s1+m_s2+m_s3)/3;//计算平均分
UpdateData(FALSE);
}
voidCCountTestDlg:
:
OnButtonsum()
{
UpdateData();
m_sum=m_s1+m_s2+m_s3;//计算总分
UpdateData(FALSE);
}
(10)编译运行程序,即可得到结果。
写出实验总结及实验报告。
实验3 编辑框和按钮控件
实验内容
利用MFC创建一个基于对话框的应用程序ComputerTest,程序运行结果如图12.9所示的计算器,计算器界面上各个按钮代表不同的计算数字和运算符,编辑框用来显示计算结果。
图12.9程序运行结果
实验步骤
1.启动VisualC++6.0,利用MFC向导创建一个基于对话框的应用程序ComputerTest。
2.将对话框模板上默认的两个按钮删除,利用控件工具栏增加如图12.9所示的各个按钮控件和编辑框控件。
设置控件属性表12-5所示。
3.打开ClassWizard类向导页面,选择MemberVariables标签页面,为编辑框控件IDC_EDIT1分别添加字符串类型CString和编辑框类型CEdit的变量:
m_result和m_edit,如图12.10所示。
添加的成员变量如表12-6。
表12-5ComputerTest控件属性
控件
ID
标题属性
编辑框
IDC_EDIT1
——Centered
按钮
IDC_BUTTON1
1默认
按钮
IDC_BUTTON2
2默认
按钮
IDC_BUTTON3
3默认
按钮
IDC_BUTTON4
4默认
按钮
IDC_BUTTON5
5默认
按钮
IDC_BUTTON6
6默认
按钮
IDC_BUTTON7
7默认
按钮
IDC_BUTTON9
9默认
按钮
IDC_BUTTON0
0默认
按钮
IDC_CE
CE默认
按钮
IDC_RESULT
=默认
按钮
IDC_ADD
+默认
按钮
IDC_DIFFERENCE
-默认
按钮
IDC_MULTIPLE
×默认
按钮
IDC_DEVIDE
÷默认
表12-6控件及其关联变量
控件ID号
变量类型
变量名
取值范围
IDC_EDIT1
CString
m_result
—
IDC_EDIT1
CEdit
m_edit
—
图12.10ClassWizard类向导对话框
4.双击数字1按钮控件,或打开类向导中MessageMaps页面,添加该数字按钮IDC_BUTTON1的单击BN_CLICKED消息函数,并添加如下代码:
voidCComputerTestDlg:
:
OnButton1()
{
charlast[10];
m_edit.GetWindowText(last,10);//获取编辑框中已输入的文本
chars[2]="1";
m_result=strcat(last,s);//将先后输入的文本拼接成一个字符串
UpdateData(FALSE);
}
用同样的方法为其他九个数字按钮添加单击的消息,并添加相应的代码,只需将每个消息函数体中chars[]=“1”;设置为相应的数字“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“0”即可。
5.按组合键Ctrl+W,打开类向导对话框,在MessageMaps页面中为【CE】复位归零按钮添加单击BN_CLICKED的消息响应函数,并添加如下代码:
voidCComputerTestDlg:
:
OnCe()
{
m_edit.SetSel(0,-1);//将编辑框中内容全部选中
m_edit.ReplaceSel("");//将选中的内容替换为空
}
6.将项目工作区窗口切换到ClassView页面,选中CComputerTestDlg类单击鼠标右键选择AddMemberVariable,为对话框类添加Public型成员变量如下:
doubledata1,data2,result;//用来代表运算数和结果
intflag;//代表运算类型
图12.11ClassWizard类向导对话框
7.按组合键Ctrl+W,打开类向导对话框,在MessageMaps页面中分别为加、减、乘、除运算符按钮添加单击BN_CLICKED的消息响应函数如图12.11所示,并添加如下代码:
“+”运算符:
voidCComputerTestDlg:
:
OnAdd()
{
charlast[10];
m_edit.GetWindowText(last,10);//获取编辑框中输入的内容
data1=atof((LPCTSTR)last);//将编辑框中的字符串内容转化为数值型内容
m_result="";//将编辑框清空,以便于输入显示另一个计算数
UpdateData(FALSE);
flag=1;//标志值置1代表加运算
}
“-”运算符:
voidCComputerTestDlg:
:
OnDifference()
{
charlast[10];
m_edit.GetWindowText(last,10);//获取编辑框中输入的内容
data1=atof((LPCTSTR)last);//将编辑框中的字符串内容转化为数值型内容
m_result="";//将编辑框清空,以便于输入显示一个计算数
UpdateData(FALSE);
flag=2;//标志值置2代表减运算
}
“×”运算符:
voidCComputerTestDlg:
:
OnMultiple()
{
charlast[10];
m_edit.GetWindowText(last,10);//获取编辑框中输入的内容
data1=atof((LPCTSTR)last);//将编辑框中的字符串内容转化为数值型内容
m_result="";//将编辑框清空,以便于输入显示一个计算数
UpdateData(FALSE);
flag=3;//标志值置3代表乘运算
}
“÷”运算符:
voidCComputerTestDlg:
:
OnDevide()
{
charlast[10];
m_edit.GetWindowText(last,10);//获取编辑框中输入的内容
data1=atof((LPCTSTR)last);//将编辑框中的字符串内容转化为数值型内容
m_result="";//将编辑框清空,以便于输入显示一个计算数
UpdateData(FALSE);
flag=4;//标志值置4代表除运算
}
8.按组合键Ctrl+W,打开类向导对话框,在MessageMaps页面中为“=”按钮添加单击BN_CLICKED的消息响应函数,并添加如下代码:
voidCComputerTestDlg:
:
OnResult()
{
chars[20];
UpdateData();
data2=atof((LPCTSTR)m_result);
if(flag==1)
result=data1+data2;//执行加运算
if(flag==2)
result=data1-data2;//执行减运算
if(flag==3)
result=data1*data2;//执行乘运算
if(flag==4)
result=data1/data2;//执行除运算
_gcvt(result,10,s);//将计算结果result转换为字符串类型
m_result=(LPCTSTR)s;//将字符串S中内容转化为编辑框变量所对应CString类型
UpdateData(FALSE);
}
9.编译运行程序,结果如图12.9所示,按算术运算规则可得出相应的结果。
写出实验总结及实验报告。