我创建了这样的模态对话框:
CDialog dlg;
dlg.DoModal();
但是当窗口打开时,我可以访问我程序的后台窗口(移动它们并关闭它们),但我只需要关注我的窗口。 (我认为模态对话框不应该像这样)
我该怎么做?
修改
我似乎找到了这种行为的原因:在打开我的对话框之前,我在CMyDlg :: OnInitDialog()函数中打开另一个模态对话框,当我对此进行注释时,我的对话框再次变为模态。但是如何解决这个问题呢?
一些描述问题的代码:
void CMyView::OnSomeButtonPress()
{
CMyDlg dlg;
dlg.DoModal();
}
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//some init here...
//new modal dialog here (if comment this CMyDlg works as modal)
CSettingsDlg dlg;
dlg.DoModal();
//...
}
答案 0 :(得分:4)
您可以通过为对话框指定父窗口来解决您的问题,您可以通过在每个对话框类的构造函数中传递此指针来实现,如代码所示。
void CMyView::OnSomeButtonPress()
{
CMyDlg dlg(this);
dlg.DoModal();
}
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//some init here...
CSettingsDlg dlg(this);
dlg.DoModal();
//...
}
答案 1 :(得分:2)
您不能在OnInitDialog方法或OnInitDialog方法调用的任何函数中使用对话框。你必须使用来自其他地方的CSettingsDlg的DoModal()。
这样的事情:
void CMyView::OnSomeButtonPress()
{
//new modal dialog here (if comment this CMyDlg works as modal)
CSettingsDlg dlgSettings;
dlgSettings.DoModal();
...
CMyDlg dlg;
dlg.DoModal();
}
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//some init here...
//...
}