如何初始化模态对话框? (C++/MFC)

Posted

技术标签:

【中文标题】如何初始化模态对话框? (C++/MFC)【英文标题】:How to initialize a modal dialog ? (C++ / MFC) 【发布时间】:2017-09-27 10:10:15 【问题描述】:

我想在对话框显示时填写一些字段。因此,我想遵循这些步骤:

    构造对话框对象 调用 DoModal() 初始化其字段

但是,只有在对话框关闭时,我才能传递给 DoModal() 之后的指令。因此,如何初始化对话框的字段?

我试图覆盖 DoModal():

int MyDialog::DoModal()

    int a = CDialogEx::DoModal();
    InitDialog();

    return a;

但这是同样的问题:对话框关闭时调用 InitDialog()...

【问题讨论】:

DoModal 在对话框关闭之前不会返回。实例化 MyDialog,初始化成员,然后调用 DoModal() 【参考方案1】:

创建对话框对象,而不是在对话框上添加OnInitDialog,此方法将在显示对话框之前调用(OnInitDialog msdn)。 将变量添加到您的对话框(int a;)

通话对话:

CDialog dlg;
dlg.a = 10;
dlg.DoModal();

【讨论】:

谢谢!这就是解决方案:) 初始化应该由构造函数完成,而不是公开成员变量(= 糟糕的设计)。 默认只有默认构造函数,需要重写 或添加公共方法,将值作为参数传入,然后将其分配给您的变量。

以上是关于如何初始化模态对话框? (C++/MFC)的主要内容,如果未能解决你的问题,请参考以下文章

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

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

如何在另一个线程中关闭 MFC 模态对话框并获得对话框返回值?

MFC模态与非模态对话框

MFC 创建模态与非模态对话框

MFC 模态对话框与非模态对话框