其他分享
首页 > 其他分享> > MFC:论模式对话框和非模式对话框

MFC:论模式对话框和非模式对话框

作者:互联网

一.对话框的分类

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

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

非模态对话框:当它弹出后,本程序其他窗口仍能响应用户输入,非模态对话框一般用来显示提示信息等

MFC将模式和非模式对话框的功能都封装在CDialog类中

 

二.创建对话框

在用VS创建对话框模板的时候,会自动生成两个cpp,分别是MfcDlgTest.cpp和MfcDlgTestDlg.cpp

MfcDlgTest.cpp是框架类,通过InitInstance()来调用MfcDlgTestDlg.cpp,

MfcDlgTestDlg.cpp是主要的显示(渲染视图)类

 

三.弹出模态对话框

弹出对话框比较关键的一个函数就是对话框类的DoModal(),它可以用来显示一个模态对话框.其返回值对应于用来关闭对话框的控件ID.(要显示一个非模态对话框,可以用Create()来代替DoModal())

 

//DoModal()调用层次
CMyDialog::DoModal()
    CMyDialog::OnInitDialog()
        CDialog::OnInitDialog()
            CWnd::UpdateData(false)
                CMyDialog::DoDataExchange()

 

//Example
void CTestDlg::OnBnClickedBtnAdd(){
    
    INT_PTR nRes;  //用来保存DoModal函数的返回值
 
    CTestDlg testDlg;
    nRes=testDlg.DoModal();    //弹出对话框
    if(IDCANCEL==nRes)
        return;
 
}

 

四.弹出非模态对话框

//Example
 
CDiglog7* pDlg=new CDiglog7;  //创建非模态对话框实例
pDlg->Create(IDD_DIALOG7,this);
//pDlg->Create(IDD_CHAT_DLG);//父窗口是m_pMainWnd所指定的对象
//pDlg->Create(IDD_CHAT_DLG, GetDesktopWindow());//不依赖与其他窗口,独立的窗口
 
pDlg->ShowWindow(SW_SHOW);  //显示非模态对话框

 

标签:模态,MFC,对话框,Create,模式,pDlg,cpp,DoModal
来源: https://www.cnblogs.com/k5bg/p/11127424.html