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