从属性页的事件处理程序调用DoModal()不会弹出对话框

Calling DoModal() from an event handler of property page does not bring the dialog pop up?

本文关键字:对话框 DoModal 事件处理 程序 调用 从属性      更新时间:2023-10-16

目前我正在使用属性表,其中我添加了4页,并在第二页中添加了一个按钮。无论我添加的页面是从resource.dll加载的,当我运行应用程序时,它的工作如预期的那样。正如上面所提到的,我在第二页添加了一个按钮,这正是我陷入困境的地方。我的意图是当按钮单击发生时,我想弹出一个模态对话框。最初我在resource.dll中创建了一个对话框,并在主应用程序中使用类视图添加了一个类,该类派生自CDialog .为了获得弹出,我在第二页按钮事件处理程序中添加了以下代码片段,

Void CSecondPage::OnbuttonClick()
{
  CPopupDlg dlg(IDD_MYDIALOG);//CPopupDlg *dlg = new CPopupDlg(IDD_MYDIALOG);
  dlg.doModal();//dlg->doModal();//In this way also I tried but didn't work
}

和CPopupDlg的构造函数如下,

CPopupDlg::CPopupDlg(int n):CDialog(n)
{
}

我甚至检查了事件是否被触发,它被触发了,但弹出对话框没有发生。

我在调试时注意到的一件事是"CPopupDlg hWnd = 0X000000"。

有没有人能让我知道为什么弹出对话框没有发生,也请让我知道我如何才能实现弹出对话框,当我点击第二页的按钮

是的,最后我决定在buttonclick事件就像我上面提到的需要设置的资源处理resource.dll使用AfxSetResourceHandle(),因为在第一页我已经设置为bitmapres.dll bitmapres.dll未能找到对话框资源,所以在单击事件resource.dll重置它我能找到的资源资源和对话我呼吁的流行没有WS_CHILD(它是)因为类型即使我们使用AfxSetResourceHandle()设置资源句柄,它也会重叠。然后我将它的样式修改为WS_POPUP,然后它工作得很好。

Void CSecondPage::OnbuttonClick()
{

CPopupDlg dlg(IDD_MYDIALOG);//CPopupDlg *dlg = new CPopupDlg(IDD_MYDIALOG);
AfxSetResourceHandle(hDialogRes);
dlg.doModal();//dlg->doModal();//In this way also I tried but didn't work
}

按如下方式设置样式使我得到了想要的目标。

STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU