2013-03-25 33 views
2

我想更改CPrintDialog的属性,当打印机从我的应用程序更改时。如何更改自定义的CPrintDialog的属性

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

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

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

但是,如果我从CPrintDialog的组合框中更改打印机,然后根据打印机选择自动更改它的属性。

我不知从哪里找到任何解决方案。请参考我附上的图片。

CPrintDialog

编辑 作为科迪建议,我可以从我的应用程序改变了打印机按照所选的打印机,即使我申请打印命令,然后打印从选定的打印机进入,这一切都顺利, 但这不是问题,问题是,在第一次打开打印对话框时,如果从我的应用程序中选择了其他默认打印机,则其属性与所选打印机不匹配。

回答

0

最后我已经解决了我的打印机礼仪的问题。

我已经在doModal()之前初始化m_pd结构之后加入了这段代码。

HGLOBAL hDevMode = NULL; 
HGLOBAL hDevNames = NULL; 
if (GetPrinterDevice(CurrentPrinterName.GetBuffer(), &hDevNames, &hDevMode)) 
{ 
    AfxGetApp()->SelectPrinter(hDevNames, hDevMode); 

} 

我通过hDevModehDevNamesGetPrinterDevice()功能。

其工作正常,没有任何副作用。

仍然温暖感谢@Cody Gray@roger_rowland的支持.. :)

7

你做错了。您应该而不是通过显示打印机对话框并以编程方式操作其控件来自定义打印设置。这肯定会出错,就像你观察到的那样。这不是通用对话框的预期使用模型。

相反,通过修改其m_pd结构设置为默认CPrintDialog值,如在the documentation描述:

要使用CPrintDialog对象,首先创建使用CPrintDialog构造的对象。一旦构造完对话框,就可以设置或修改m_pd结构中的任何值,以初始化对话框控件的值。 m_pd结构的类型为PRINTDLG。有关此结构的更多信息,请参阅Windows SDK。

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

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

查找MSDN文章中的详细信息:How to programmatically print to a non-default printer in MFC

+0

嘿,伙计,我尝试了所有你认为上面的方法,但是我的问题没有解决。需要一些更多的帮助.. – 2013-04-04 13:18:45

+0

你究竟做了什么?什么地方出了错?你还没有用更多的代码更新这个问题,而且我坐得太远而无法看到你的电脑屏幕。 – 2013-04-05 03:42:15

+1

@AB Bolim - 说实话,在我看来,科迪告诉了你在回答你的问题时需要知道的一切。恕我直言,你应该做光荣的事情,并接受它。 – 2013-04-05 04:48:36

相关问题