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