MFC对话框应用程序练习ok

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MFC对话框应用程序(项目名CDlg)
1.求三科平均成绩的对话框程序。

运行时的界面如下:
1. 定制界面:添加控件、设置属性
控件ID号标题属性
Group Box IDC_STATIC 计算成绩
Static Text IDC_STATIC 成绩1
Static Text IDC_STATIC 成绩2
Static Text IDC_STATIC 成绩3
Static Text IDC_STATIC 平均分
Edit Control IDC_EDIT1 Align text:Right
Edit Control IDC_EDIT2 Align text:Right
Edit Control IDC_EDIT3 Align text:Right
Edit Control IDC_EDIT4 计算平均分Align text:Right;Read-only
Button IDC_BUTTON1
Button IDC_OK 退出
2. 添加成员变量:
(右键Edit Control /添加变量菜单选项进入Member Variables)
选变量类型
选为value 输入变量名
控件ID 变量名变量类型数值范围IDC_ EDIT4 m_Sav CString
IDC_EDIT1 m_S1 int 0~100
IDC_EDIT2 m_S2 int 0~100
IDC_EDIT3 m_S3 int 0~100
3. 添加初始化代码:(解决方案资源管理器/ 源文件/ 双击CDlg.cpp)
BOOL CDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Sav="0.00";
m_S1=m_S2=m_S3;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
4. 添加代码:(双击Button1按钮)
void CDlgDlg::OnButton1()
{
UpdateData();
double ave=(double)(m_S1+m_S2+m_S3)/3.0;
m_Sav.Format(_T("%6.2f"),ave);
UpdateData(FALSE);
}
2.简单计算器设计(一)(项目名CJsq)
要求:设计一个对话框应用程序,在对话框模板上添加控件,实现简单计算功能
1. 修改创建的对话框项目模板。

删除模板上自动创建的三个控件。

加入“简单计算器”、“数一”、“数二”、“结果”四个静态文本框。

继续用鼠标从工具箱中向对话框添加3个编辑框和6个按钮控件,更改按钮的标题。

2. 用ClassWizard为编辑框添加变量:m_Num1, m_Num2, m_Num3
3. 用ClassWizard为按钮控件添加消息映射:
4. 在实现文件(cpp文件)中加入单击按钮时的事件响应代码。

(双击一个按钮可直接进入函数编辑)
void CJsqDlg::OnButton1()
{
UpdateData(TRUE);
m_Num3=m_Num1+m_Num2;
UpdateData(FALSE);
}
void CJsqDlg::OnButton2()
{
UpdateData(TRUE);
m_Num3=m_Num1-m_Num2;
UpdateData(FALSE);
}
void CJsqDlg::OnButton3()
{
m_Num1=0;
m_Num2=0;
m_Num3=0;
UpdateData(FALSE);
MessageBox(_T("欢迎重新开始计算!"));
}
void CJsqDlg::OnButton4()
{
UpdateData(TRUE);
m_Num3=m_Num1*m_Num2;
UpdateData(FALSE);
}
void CJsqDlg::OnButton5()
{
UpdateData(TRUE);
if(m_Num2==0)
MessageBox(_T("除数不能为0!"));
else
m_Num3=m_Num1/m_Num2;
UpdateData(FALSE);
}
void CJsqDlg::OnButton6()
{
CDialog::OnOK();
}
3. 简单计算器(二)(项目名为CJsq2)运行时界面如下:
编程提示:
1.添加变量列表:
控件ID 变量名变量类型数值范围
fuhao char
IDC_EDIT1 m_N1 float
IDC_EDIT2 m_N2 float
IDC_EDIT3 m_N3 float
2. 添加成员变量fuhao的方法:
在对话框窗口,右键单击-》添加变量,,然后在弹出的对话框的输入变量类型和名称。

输入类型和变
量名
3.添加的代码:(分别双击RadioButton)
void CJsq2Dlg:: OnBnClickedRadio1()
{ fuhao='+'; }
void CJsq2Dlg: OnBnClickedRadio2 ()
{ fuhao='-'; }
void CJsq2Dlg:: OnBnClickedRadio3 ()
{ fuhao='*'; }
void CJsq2Dlg: OnBnClickedRadio4 ()
{ fuhao='/'; }
//计算(双击计算按钮)
void CJsq2Dlg::OnButton1()
{
UpdateData(TRUE);
switch(fuhao)
{
case '+':
m_N3=m_N1+m_N2;break;
case '-':
m_N3=m_N1-m_N2; break;
case '*':
m_N3=m_N1*m_N2; break;
case '/':
if(m_N2 = = 0 )
MessageBox(_T("除数不能为零!"));
else
{
m_N3 = m_N1/m_N2; break;
}
default:
m_N3=m_N1+m_N2;
}
UpdateData(FALSE);
}
//清除(双击清除按钮)
void CJsq2Dlg::OnClear()
{
UpdateData(TRUE);
m_N1=0;
m_N2=0;
m_N3=0;
UpdateData(FALSE);
}
//关闭(双击取消按钮)
void CJsq2Dlg::OnOK()
{ OnCancel();;
}
4.彩票机程序:
彩票机界面:
设置进度条变量和7个编辑框变量:
添加类成员变量:
消息映射:
BOOL CLotusDlg::OnInitDialog()
{
CDialog::OnInitDialog();
……
// TODO: Add extra initialization here
m_x=0;
m_pProg.SetRange(0,70);
srand((unsigned)time(NULL));
return TRUE; // return TRUE unless you set the focus to a control }
(一)
//手动摇号,每按一次摇号按钮出一个号
void CLotusDlg::OnButton1()
{
// TODO: Add your control notification handler code here
switch(m_x/10)
{
case 0:
m_N1=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 1:
m_N2=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 2:
m_N3=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 3:
m_N4=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 4:
m_N5=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 5:
m_N6=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 6:
m_N7=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
}
UpdateData(FALSE);
}
void CLotusDlg::OnButton2()
{
// TODO: Add your control notification handler code here m_x=0;
m_N1=0;
m_N2=0;
m_N3=0;
m_N4=0;
m_N5=0;
m_N6=0;
m_N7=0;
UpdateData(FALSE);
m_pProg.SetPos(1);
}
(二)
//自动摇号,按摇号按钮启动
void CLotusDlg::OnButton1()
{
SetTimer(1,2000,NULL);
}
void CLotusDlg::OnButton2()
{
m_N1=0;
m_N2=0;
m_N3=0;
m_N4=0;
m_N5=0;
m_N6=0;
m_N7=0;
UpdateData(FALSE);
m_pProg.SetPos(0);
KillTimer(1);
}
void CLotusDlg::OnTimer(UINT nIDEvent) {
switch(m_x/10)
{
case 0:
m_N1=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 1:
m_N2=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 2:
m_N3=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 3:
m_N4=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 4:
m_N5=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 5:
m_N6=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
case 6:
m_N7=rand()%36+1;
m_pProg.SetPos(m_x+=10);
break;
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
void CLotusDlg::OnOK()
{
KillTimer(1);
CDialog::OnOK();
}
(1)产生随机数的方法
函数unsigned int rand() 产生随机数。

函数void srand(unsigned int seed) 设定随机数产生器的种子,其中seed为随机数产生器的种子,本例中用系统时钟当前值作随机数种子:
srand((unsigned)time(NULL));函数的
表达式rand()%36+1产生1-36之间的随机数
(1)定时器的使用方法
定时器的使用涉及OnTimer、SetTimer、KillTimer三个函数。

SetTimer用于设定定时时间和启动定时器,其中第一个参数是定时编号,第二个参数是定时的毫秒数。

本例中将1号定时器定时时间设定为2秒:第三个参数是
每次重复调用的函数地址指针,NULL即发送WM_TIMER消息。

SetTimer(1,2000,NULL);
定时器启动以后将持续工作,每到达一次定时时间即启动一次OnTimer消息函数的执行。

KillTimer的作用是停止指定定时器的工作。

注意:定时器的使用,关键是加入OnTimer函数,SetTimer和KillTimer直接可用,方法如下:
在CXxx2View类上点击“右键->属性”,找到消息按扭,如下图:。

相关文档
最新文档