每次都不会调用CPrintDialog :: OnInitDialog

时间:2013-03-21 12:19:55

标签: c++ windows visual-c++ mfc

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

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

我的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并在其中添加了一个复选框。我怀疑它是否正在创造这个问题。

1 个答案:

答案 0 :(得分:0)

如果您想说OnInitDialog()而不是OnInit(),那么this MSKB article可能会解释您的问题,尽管它似乎已在VC6 SP1之后修复。