【问题标题】:How to change customized CPrintDialog's properties如何更改自定义打印对话框属性
【发布时间】:2013-04-06 17:03:52
【问题描述】:

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

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

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

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

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

我还没有从任何地方找到任何解决方案。请参考我附上的图片。

编辑 正如科迪建议的那样,我可以根据我的应用程序中选择的打印机更改打印机,即使我应用打印命令,然后从选择的打印机打印,这一切都很顺利, 但这不是问题,问题是,在第一次打开“打印”对话框时,它的属性与所选打印机不匹配,如果选择的打印机不是我的应用程序中的默认打印机。

【问题讨论】:

    标签: windows visual-c++ mfc


    【解决方案1】:

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

    改为通过修改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

    【讨论】:

    • 嘿伙计,我尝试了您建议的上述所有方法,但我的问题仍然没有解决..需要更多帮助..
    • 您到底尝试了什么?什么地方出了错?你还没有用更多代码更新问题,我坐得太远了,看不到你的电脑屏幕。
    • @AB Bolim - 老实说,在我看来,Cody 告诉了你在回答你的问题时你需要知道的一切。恕我直言,您应该做光荣的事情并接受它。
    • @roger_rowland - 嘿伙计,无论 Cody 建议我已经尝试过什么,但我第一次尝试工作当打印机从我的应用程序更改为默认设置并且打印机对话框打开时,它向我显示更改了我从应用程序中更改的打印机,但其属性没有更改,如屏幕截图中所示。它显示默认的打印机属性。但是,在那之后,如果我从“打印机”对话框更改打印机,那么一切顺利。拜托,我老实说,因为我不在乎这个赏金和所有。但是你们仍然填写你是对的然后我可以接受你的答案。
    • 好吧,我明白你的观点,但即便如此,在我看来,你也不会得到更好的答案......但无论如何这是你的选择......没有汗水:-)
    【解决方案2】:

    终于解决了我的打印机属性问题。

    我在初始化m_pd结构之后把这段代码放在doModal()之前。

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

    我在GetPrinterDevice() 函数中传递了hDevModehDevNames

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

    感谢@Cody Gray@roger_rowland 的支持仍然很热情..:)

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 2011-07-21
      • 1970-01-01
      • 2011-01-27
      • 2015-01-13
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多