2013-11-28 2 views
0

У меня есть класс с именем CMyPrintDialog, полученный из CPrintDialog MFC. Он используется как ActiveX в IE, и проект связан с MFC статически. Он хорошо работает в IE8 на протяжении многих лет. Но тот же двоичный код проекта не работает на IE10. Диалог печати может появиться, но, к сожалению, его OnInitDialog никогда не вызывается и вызывает проблемы. Странно то, что если я присоединю отладчик VS к IE, OnInitDialog будет вызываться правильно, и настраиваемый диалог печати будет хорошо работать. Кажется, что Microsoft что-то изменила и вызывает проблему.CMyPrintDialog :: OnInitDialog() не вызывается в IE10

Я нашел a similar link, но это не сработает.

Благодарим миллион за любые идеи.

ответ

1

проблема вызвана новой функции в IE после IE9 - «Повесьте сопротивления». Мы можем избежать проблемы, отключив новую функцию: установите значение ниже 0 и закройте все окна IE. HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main \ Тип: REG_DWORD Имя: HangRecovery Значение: 0

0

Я не получаю вашу точку именно вы хотите сказать, Рассмотрим CPrintDialog сбою приложения с IE10.What это вам нужно сделать, это,

Настройка функции сообщения крюк, _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; 
    } 
+0

Код тот же, что и у вас в конструкторе. Моя проблема не в сбое. На самом деле открывается диалоговое окно печати, но дескриптор сообщения производного класса, например OnOk(), не вызывается, когда я нажимаю кнопку «ОК». Это делает диалог неправильным. – Cesc

+0

@Cesc вы уверены, что ваше сообщение OnOK() имеет правильный прототип, поскольку он присутствует в родительском классе. То есть в вашем случае вы вызываете OnOK() означает, что вы выполняете родительскую функцию. Такой прототип должен быть таким же, как и другим связанным с кодом кодом. –

+0

Да, это точно так же. Как и то, что я упоминал, я строю dll и использую его на IE8, все работает хорошо. Но если я использую одну и ту же DLL в IE10, у меня возникают проблемы. Я построил код VS2012. – Cesc

Смежные вопросы