当打印机从我的应用程序更改时,我想更改 CPrintDialog 的属性。
我已经在自定义 CPrintDialog 的 OnInitDialog() 中设置了打印机名称。
CComboBox *wndCmbBox = (CComboBox *)GetDlgItem( IDC_PER_USER );
if( wndCmbBox != NULL )
{
wndCmbBox->SelectString( -1, s_PrinterName);
}
问题是,打印机名称可以在组合框中设置,但它的属性没有设置。 我的意思是说打印机状态、类型等... 默认情况下,设置默认打印机的属性。所以,它的冲突。
但是,如果我从 CPrintDialog 的组合框中更改了打印机,那么它的属性会根据打印机选择自动更改。
我无法从任何地方找到任何解决方案。请引用我附上的图片。
编辑 正如科迪建议的那样,我可以根据我的应用程序中选定的打印机更改打印机,即使我应用打印命令,然后从选定的打印机进行打印,这一切都很顺利, 但这不是问题,问题是,在第一次打开“打印”对话框时,它的属性与所选打印机不匹配,如果选择的打印机不是我的应用程序中的默认打印机。
最佳答案
你做错了。您应该不通过显示打印机对话框和以编程方式操作其控件来自定义打印设置。就像您观察到的那样,那肯定会出错。这不是普通对话的预期使用模型。
相反,通过修改其m_pd
结构为CPrintDialog
设置默认值,如the documentation 中所述。 :
To use a
CPrintDialog
object, first create the object using theCPrintDialog
constructor. Once the dialog box has been constructed, you can set or modify any values in them_pd
structure to initialize the values of the dialog box's controls. Them_pd
structure is of typePRINTDLG
. For more information on this structure, see the Windows SDK.
您还可以通过编程方式更改整个应用程序的默认打印机。这根本不需要显示任何对话框。为此,请调用 SelectPrinter
功能。这将设置一个新打印机并释放先前选择的打印机。
完成此操作后,无论何时显示打印对话框,它都会自动显示选定的指定打印机。当您检索有关所选打印机的信息时,您将检索到的信息将应用于正确的打印机。
在这篇 MSDN 文章中找到更多信息:How to programmatically print to a non-default printer in MFC
关于windows - 如何更改自定义打印对话框属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609102/