在IE10中未调用CMyPrintDialog::OnInitDialog()
CMyPrintDialog::OnInitDialog() is not called in IE10
我有一个名为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;
}