当用户在另一个对话框中单击时,我弹出一个CDHtmlDialog
框。这是伪代码
CMyClass{
CDHtmlDialog * m_htmlDialog;
}
CMyClass::OnInitDialog(){
m_htmlDialog = new CDHtmlDialog(IDD_DIALOG_EMAIL, IDR_HTML_SUBMIT_EMAIL);
}
CMyClass::OnBnClickSendEmail{
m_htmlDialog->Create(IDD_DIALOG_EMAIL);
//m_htmlDialog->DoModal();
m_htmlDialog->ShowWindow(SW_SHOWNORMAL);
}
在评论DoModal
时,代码运行正常。但问题是Html对话框不是模态的,我可以点击背景表格和对话框。我希望Html对话框是模态的,当我取消注释DoModal()
行时代码崩溃。
答案 0 :(得分:2)
这是我以null
指针开始时显示模态对话框的方式:
auto *pDlgEditor = new CSomeDlg(this);
if (pDlgEditor != nullptr)
{
pDlgEditor->DoModal();
delete pDlgEditor;
}
请注意,我正在传递this
,这是该窗口的所有者。
实际的类本身指定了对话资源:
CSomeDlg::CChristianLifeMinistryEditorDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_DIALOG_EXAMPLE, pParent))
我意识到我的代码没有显示CDHtmlDialog
...根据documentation,有3个构造函数:
CDHtmlDialog(); CDHtmlDialog( LPCTSTR lpszTemplateName, LPCTSTR szHtmlResID, CWnd *pParentWnd = NULL); CDHtmlDialog( UINT nIDTemplate, UINT nHtmlResID = 0, CWnd *pParentWnd = NULL);
第三个参数是默认为NULL
的父级。尝试传递this
作为第三个参数。
现在,如果您在内部一个弹出 modaless 窗口,当您执行上述操作时,父级将成为模态窗口。但是,如果您通过模态窗口父级,那么 将成为所有者。我们没有完整的信息,因此以上只是一般性建议。
请注意,文档说明如果您将pParentWnd
保留为默认值(NULL
):
如果是
NULL
,则对话框对象的父窗口将设置为主应用程序窗口。
因此,它可能不一定使用您期望的父级,这就是为什么自己指定它的好处。