我正在使用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 ); }
或者是他们在打印对话框中设置用户select打印机名称的方法。
请解释。
编辑
是的,通过onInit()我的意思是OnInitDialog()
我使用VS 2012与Win7 32位。 我只是在第一次调用DoModel()
时面临这个问题。 下一个连续的DoModel()
方法调用OnInitDialog()
。 我有debugging问题,并find了一些东西
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的function。 当问题被复制时,我观察到DYNAMIC_DOWNCAST
返回NULL
。
请注意,我已经定制了CPrintDialog,并在其中添加了一个checkbox。 我怀疑这是否会造成这个问题。
如果你打算说OnInitDialog()
而不是OnInit()
,那么可能你的问题是由MSKB文章解释的,尽管在VC6 SP1之后它似乎已经被修复了。