MFC——对话框,模态对话框

Posted 天道酬勤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC——对话框,模态对话框相关的知识,希望对你有一定的参考价值。

Windows对话框分为两类:模态对话框和非模态对话框。

模块对话框,当它弹出后,本应用程序其它窗口将不再接受用户输入,只有该对话框相应用户输入后,在对它进行相应操作退出后,其它窗口才能继续与用户交互。

非模态对话框,它弹出后,本程序其它窗口仍能相应用户输入。

 

模态对话框

首先先弄清楚主界面是如何显示出来的

加入本解决方案名称为Addition,则新建MFC工程时,会出现一个AdditionDlg .cpp文件,该文件中会有一个InitInstance()函数,用于完成初始化工作。

CAdditionDlg dlg;            // 定义对话框类CAdditionDlg的对象dlg   
m_pMainWnd = &dlg;      // 将dlg设为主窗口   
INT_PTR nResponse = dlg.DoModal();   // 弹出对话框dlg,并将DoModal函数的返回值赋给nResponse   
if (nResponse == IDOK)               // 判断返回值是否为OK按钮
{   
    // TODO: Place code here to handle when the dialog is   
    //  dismissed with OK   
}   
else if (nResponse == IDCANCEL)      // 判断返回值是否为Cancel按钮
{   
    // TODO: Place code here to handle when the dialog is   
    //  dismissed with Cancel   
}  

从上述代码可以看到,首先定义一个对话框类的对象,然后将其首地址赋予m_pMainWnd,即设定主窗口

然后就是弹出对话框了,弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数

CDialog::DoModal()函数的原型为:virtual INT_PTR DoModal(); 

返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nResult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABORT。

 

因此,可通过判断DoModal()函数的返回值,来判断按的是拿一个按钮,

比如,如果按的是OK按钮(OK按钮的消息处理函数OnBnClickedOk()中是CDialogEx::OnOK()函数),即

1 void CTipDlg::OnBnClickedOk()
2 {
3     // TODO: 在此添加控件通知处理程序代码
4     CDialogEx::OnOK();
5 }

而CDialogEx::OnOK()函数的返回值就是IDOK

至于OK按钮的消息处理函数名OnBnClickedOk的来源,可以参考下图,一目了然,

同理,如果是Cancel按钮,同样会有

1 void CTipDlg::OnBnClickedCancel()
2 {
3     // TODO: 在此添加控件通知处理程序代码
4     CDialogEx::OnCancel();
5 }

 

以上是关于MFC——对话框,模态对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个模态的对话框

MFC 模态对话框的奇怪行为

检测MFC中的模态对话框

我该如何做模态对话框片段(代码在我关闭之前不会执行)

MFC——对话框,模态对话框

MFC_对话框