在利用SoftUI作为皮肤控件时,若想将对话框设置为可以模态也可以非模态,则可利用一下方法。
利用模态对话框显示时会调用OnInitialDialog(),在对话框类中增加一变量bool m_bIsDoModal,在OnInitialDialog()中,设置其为true,然后:
OnDestroy()
{
return m_bIsDoModal ? (UIHostDlg::OnCancel()) : DestroyWindow();
}
void CImageDlg::PostNcDestroy()
{
UIHostDlg::PostNcDestroy();
if (!m_bIsDoModal){
delete this;
}
}
OnInitDialog()
{
m_bIsDoModal=true; ///< 对话框模态显示时会调用该函数
UIHostDlg::OnInitDialog();
///< 模态显示时会自动再此调用,但是非模态时由于OnInitDialog()不会被调用,
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
而在MFC的非模态对话框中,在调用Create创建窗口的时候,会调用OnInitDialog()。