并不是每次都调用CPrintDialog::OnInitDialog

CPrintDialog::OnInitDialog does not get called every time

本文关键字:CPrintDialog OnInitDialog 调用 并不是      更新时间:2023-10-16

我使用MyPrintDialog扩展CPrintDialog。问题是:当应用程序尝试打开打印对话框时,MyPrintDialog的OnInitDialog()方法不会在第一次被调用。

我试图从OnInitDialog()方法中设置打印对话框中的打印机名称。打印机名称由我想要用于打印的应用程序中的用户指定。

My OnInitDialog()方法

CComboBox *wndCmbBox = (CComboBox *)GetDlgItem( IDC_PER_USER ); /*IDC_PER_USER which is ID of Prin Dialog combo */
if( wndCmbBox != NULL )
{
    wndCmbBox->SelectString( -1, PrinterName );
} 

或者他们是否有办法在打印对话框中设置用户选择打印机名称?

请解释。

编辑

onInit()我指的是OnInitDialog()

我使用的是VS 2012和Win7 32位。我面对这个问题只是第一次呼叫DoModel()。接下来连续的DoModel()方法调用OnInitDialog()。我已经调试了这个问题,发现了一些

INT_PTR CALLBACK AfxDlgProc(HWND hWnd, UINT message, WPARAM, LPARAM)
{
    if (message == WM_INITDIALOG)
    {
        // special case for WM_INITDIALOG
        CDialog* pDlg = DYNAMIC_DOWNCAST(CDialog, CWnd::FromHandlePermanent(hWnd));
        if (pDlg != NULL)
            return pDlg->OnInitDialog();
        else
            return 1;
    }
    return 0;
}

以上是dlgcore.cpp的函数。当问题再次出现时,我观察到DYNAMIC_DOWNCAST返回NULL

请注意,我已经定制了CPrintDialog并在其中添加了一个复选框。

如果你的意思是说OnInitDialog()而不是OnInit(),那么你的问题可能是由这篇MSKB文章解释的,尽管它似乎在VC6 SP1之后已经修复了。