dlg.DoModal() 使对话框成为应用程序的模式,而不是前一个对话框

Posted

技术标签:

【中文标题】dlg.DoModal() 使对话框成为应用程序的模式,而不是前一个对话框【英文标题】:dlg.DoModal() is making the dialog box modal to the application and not to the previous dialogue box 【发布时间】:2014-08-18 11:27:01 【问题描述】:
if (IDOK == dlg.DoModal())
    
        csFile = dlg.GetPathName();
        return (LPCTSTR)csFile;
    
    return NULL;

我有一个桌面应用程序,其中有一个对话框。当我单击此对话框中的打开按钮时,应弹出另一个打开的对话框。显示此打开的对话框后,我可以再次转到上一个对话框并单击打开。因此显示打开对话框的第二个实例。我可以多次这样做。打开的对话框对整个应用程序是模态的,而不是对前一个对话框。谁能帮我这个?根据设计,一旦显示打开的对话框,在关闭之前,其他任何东西都不应该处于活动状态。

【问题讨论】:

【参考方案1】:

对话框的标准向导生成构造函数包含一个可选的构造函数参数,您可以在其中指定父窗口:

class CMyOpenDialog : public CDialog

// Construction
public:
    CMyOpenDialog(CWnd* pParent = NULL);   // standard constructor
...

当您从对话框中调用第二个对话框时,请提供父级,例如

CMyOpenDialogdlg(this);

【讨论】:

以上是关于dlg.DoModal() 使对话框成为应用程序的模式,而不是前一个对话框的主要内容,如果未能解决你的问题,请参考以下文章

vc编程DoModal弹不出对话框

在 DoModal 之后隐藏 MFC 对话框时,它的控件是不是被破坏?

控件

获取MFC类中的成员变量内容

拦截 CDialog 创建

文件对话框