我正在使用MyPrintDialog扩展CPrintDialog。 问题是: 应用程序尝试打开“打印”对话框时,MyPrintDialog的OnInitDialog()方法在第一次不会被调用。CPrintDialog :: 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并在其中添加了一个复选框。我怀疑它是否会造成这个问题。
您可以显示何时以及如何创建模态对话框? – 2013-03-22 05:45:59
另外,如果使用提供的CPrintDialog而不是定制版本,它是否也具有相同的行为方式?所以,你有没有证实你的定制是*不是*责备? – 2013-03-22 05:51:17
请在[this]找到文件(https://docs.google.com/file/d/0B1cKJCC6FFs6SzBlMHhGTi16dzQ/edit?pli=1)位置 – 2013-03-22 06:31:03