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()

Win732ビットでVS2012を使用しています。私はこの問題に直面しているのは、の最初の呼び出しだけです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つのチェックボックスを追加したことに注意してください。それが問題を引き起こしているのかどうかは疑わしい。

4

1 に答える 1

-1

OnInitDialog()の代わりに言うつもりなら、VC6 SP1の後で修正されたように見えますが、このMSKBの記事OnInit()で問題が説明されている可能性があります。

于 2013-03-21T13:13:47.013 に答える