4

我正在使用 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()

我正在使用带有 Win7 32 位的 VS 2012。我只在第一次调用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 并在其中添加了一个复选框。我怀疑它是否会造成问题。

4

1 回答 1

-1

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

于 2013-03-21T13:13:47.013 回答