您的位置:首页 > 其它

MFC练习4:使用模态对话框

2012-05-12 11:31 225 查看
模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。

基于之前的练习3,我们已经有了一个口令对话框,可以试着将两者进行结合使用。

Ⅰ、添加菜单资源和菜单响应函数

1>在DIALOG resource | Menu | IDR_DIALOGTYPE下打开菜单资源

2>在“查看”下的空白处添加一菜单项,选中Separator使产生一分隔条

3>再添加菜单项并将其ID改为ID_VIEW_MODALDIALOG,在Caption中输入“模态对话框(&M)”

Ⅱ、编辑对话框资源和创建对话框类

1>有上次编辑的基础,我们将对话编辑如下



ID控件属性
IDC_SEX1Radio Button,选中Group
IDC_SEX2Radio Button
iDC_INTEREST1Check Box,选中Group登山
IDC_INTEREST2Check Box游戏
IDC_INTEREST3Check Box看书
IDC_INTEREST4Check Box玩游戏
IDC_COMBOCombo Box
IDC_EDITEdit Box
Ⅲ、添加消息响应函数和代码

1>按下Ctrl+W并在Class name下选中CDialogView,对应的Object IDs选中ID_VIEW_MODALDIALOG,在Message中选COMMAND,最后Add Function(使用默认函数名)

2>类似,在CDialogModal中添加OnInitDialog()、OnOK()和OnCancel()函数

3>在Member Variable里如下进行修改

Control IDsTypeMember
IDC_COMBOCComboBoxm_Combo
IDC_EDITCStringm_Edit
IDC_SEX1CButtonm_Radio
4>在下列函数写下如是语句,相关的#include "DialogModal.h"记得添加到对应的cpp里去

void CDialogView::OnViewModaldialog()
{
// TODO: Add your command handler code here
CDialogModal m_Dlg;
m_Dlg.DoModal();
}

void CDialogModal::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}

void CDialogModal::OnOK()
{
// TODO: Add extra validation here
CString str;
str.Empty();
if(m_Radio.GetCheck())str+="帅哥";
else str+="美女";
str+="你好,你的爱好: ";
BOOL flag=0;
CButton *p;
p=(CButton*) GetDlgItem(IDC_INTEREST1);
if(p->GetCheck())//判断登山是否选中
{
str+=" 登山 ";
flag=1;
}
p=(CButton*) GetDlgItem(IDC_INTEREST2);
if(p->GetCheck())
{
str+=" 游泳 ";
flag=1;
}
p=(CButton*) GetDlgItem(IDC_INTEREST3);
if(p->GetCheck())
{
str+=" 看书 ";
flag=1;
}
p=(CButton*) GetDlgItem(IDC_INTEREST4);
if(p->GetCheck())
{
str+=" 玩游戏 ";
flag=1;
}
if(!flag)str+=" 未知 ";
str+=",学历: ";
CString tmp;
int number=m_Combo.GetCurSel();//得到当前被选中的序号
m_Combo.GetLBText(number,tmp);//获取当前内容
str+=tmp;
m_Edit=str;
UpdateData(false);//更新内容
}

BOOL CDialogModal::OnInitDialog()
{
// TODO: Add your command handler code here
CDialog::OnInitDialog();
m_Radio.SetCheck(1);//把男设为默认值
m_Combo.InsertString(0,"小学");//往Combo Box中加入选项
m_Combo.InsertString(1,"初中");
m_Combo.InsertString(2,"高中");
m_Combo.InsertString(3,"大学");
m_Combo.InsertString(4,"硕士及以上");
m_Combo.SetCurSel(0);//设置默认值
return TRUE;
}

5>运行时记得从多文档的“查看”下点击“模态对话框”,当然了,如果要用到之前写过的口令对话框,那就得在CDialogApp::InitInstance()如下写了

CPasswordDialog cDlg;//建立对象
if(cDlg.DoModal()==IDOK)//用户按下确定
{
if(cDlg.m_Password!=1925)//口令值应为1925
{
AfxMessageBox("口令错误,确定后退出。");//口令不对,显示错误信息
return FALSE;
}
else
{
CDialogModal cDlg;
cDlg.DoModal();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: