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つのチェックボックスを追加したことに注意してください。それが問題を引き起こしているのかどうかは疑わしい。