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

时间:2014-08-16 11:29:17

标签: c++ visual-c++ mfc

目前我正在处理属性表,其中我添加了4个页面,在第二个页面中我添加了一个按钮。我添加的页面是从resource.dll加载的,当我运行应用程序时,它的工作方式是如上所述,我在第二页中添加了一个按钮,这正是我卡住的地方。我的意图是当按钮点击发生时我想弹出一个模态对话框。最初我在资源中创建了一个对话框.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。”

任何人都可以让我知道为什么没有发生对话框弹出,请告诉我如何在单击第二页的按钮时弹出对话框。

1 个答案:

答案 0 :(得分:0)

是的,最后我解决了。在上面提到的buttonclick事件中,需要使用AfxSetResourceHandle()将资源句柄设置为resource.dll,因为在第一页我将它设置为bitmapres.dll我是无法在此bitmapres.dll中找到对话框资源,因此再次将其在click事件中重置为resource.dll我能够在资源中找到资源,而我正在调用pop的对话框没有因为这个类型(它是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