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

时间:2013-11-28 03:40:41

标签: c++ internet-explorer mfc

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

我找到了a similar link,但它不起作用。

万分感谢任何想法。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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;
   }