在IE10中未调用CMyPrintDialog::OnInitDialog()

CMyPrintDialog::OnInitDialog() is not called in IE10

本文关键字:OnInitDialog CMyPrintDialog 调用 IE10      更新时间:2023-10-16

我有一个名为CMyPrintDialog的类,它派生自MFC的CPrintDialog。它被用作IE中的ActiveX,并且该项目静态地链接到MFC。多年来,它在IE8中运行良好。但该项目的相同二进制文件在IE10上运行不好。打印对话框可能会弹出,但不幸的是,它的OnInitDialog从未被调用,并导致问题。奇怪的是,如果我将VS调试器附加到IE,OnInitDialog将被正确调用,并且自定义的打印对话框工作良好。微软似乎改变了一些事情,并导致了这个问题。

我找到了一个类似的链接,但它不起作用。

非常感谢你的想法。

该问题是由IE在IE9之后的新功能"Hang Resistance"引起的。我们可以通过禁用新功能来避免这个问题:将以下值设置为0,并关闭所有IE窗口。HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\类型:REG_DWORD名称:HangRecovery值:0

我没有完全理解你的意思,你想说,考虑CPrintDialog用IE10崩溃你的应用程序。你需要做的是,

在的构造函数中设置消息挂钩函数_AfxCommDlgProc()

CPrintDialog派生类如下所示:

 // CMyPrintDialog is a CPrintDialog-derived class.
   CMyPrintDialog::CMyPrintDialog(DWORD dwFlags)
   : CPrintDialog(FALSE,dwFlags)
   {
      //{{AFX_DATA_INIT(CMyPrintDialog)
      //}}AFX_DATA_INIT
      // MFCBUG: MFC 6.0 doesn't set the message hook!
      m_pd.Flags |= PD_ENABLEPRINTHOOK | PD_ENABLESETUPHOOK;
      // _AfxCommDlgProc is exported from static MFC libraries
      m_pd.lpfnPrintHook = _AfxCommDlgProc;
      m_pd.lpfnSetupHook = _AfxCommDlgProc;
   }