如何更改自定义CPrintDialog的属性

AB *_*lim 2 windows mfc visual-c++

当打印机从我的应用程序更改时,我想更改CPrintDialog的属性.

我在自定义CPrintDialog的OnInitDialog()中设置了打印机名称.

CComboBox *wndCmbBox = (CComboBox *)GetDlgItem( IDC_PER_USER );
if( wndCmbBox != NULL )
{
    wndCmbBox->SelectString( -1, s_PrinterName);
}
Run Code Online (Sandbox Code Playgroud)

问题是,可以在组合框中设置打印机名称,但不设置其属性.我的意思是说打印机状态,类型等...默认情况下,默认打印机的属性设置.所以,它的冲突.

但是,如果我从CPrintDialog的组合框中更改了打印机,则根据打印机选择自动更改其属性.

我从任何地方找到任何解决方案.请参考我附上的图片.

的CPrintDialog

编辑 如同cody建议,我可以从我的应用程序中按照所选打印机更改打印机,即使我应用打印命令,然后从选定的打印机打印,这一切都很顺利,但这不是问题,问题是,在第一次打开打印对话框,其属性与所选打印机不匹配,如果选择打印机,则从我的应用程序中选择默认打印机.

Cod*_*ray 7

你做错了.你应该不通过显示打印机对话和编程操纵控制自定义打印设置.这肯定会出错,就像你已经观察到的那样.这不是常见对话框的预期使用模型.

而是CPrintDialog通过修改其m_pd结构来设置默认值,如文档中所述:

要使用CPrintDialog对象,首先使用CPrintDialog构造函数创建对象.构建对话框后,可以设置或修改m_pd结构中的任何值以初始化对话框控件的值.该m_pd结构是类型PRINTDLG.有关此结构的详细信息,请参阅Windows SDK.

您还可以以编程方式更改整个应用程序的默认打印机.这不需要显示任何对话框.为此,请调用该SelectPrinter函数.这将设置新打印机并释放先前选择的打印机.

完成此操作后,无论何时显示打印对话框,它都会自动将指定的打印机显示为已选择.当您检索有关所选打印机的信息时,您将检索的信息将应用于正确的打印机.

在此MSDN文章中查找更多信息:如何以编程方式在MFC中打印到非默认打印机