windows - 如何更改自定义打印对话框属性

标签 windows visual-c++ mfc

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

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

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

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

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

我无法从任何地方找到任何解决方案。请引用我附上的图片。

CPrintDialog

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

最佳答案

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

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

To use a CPrintDialog object, first create the object using the CPrintDialog constructor. Once the dialog box has been constructed, you can set or modify any values in the m_pd structure to initialize the values of the dialog box's controls. The m_pd structure is of type PRINTDLG. 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/

相关文章:

c++ - 使用 C 或 C++ 的 Windows 的 Memcached 客户端?

c++ - 为什么我的 DLL 不需要 DllMain 函数?

c++ - 如何检测我的程序可用的堆栈空间量?

c++ - 如何在 C++ Win32 中捕获鼠标在标题栏上的移动?

c++ - 按字符串长度对 CMap 键进行排序

windows - 安装 win32gui 时出错

c++ - 确定函数签名

c++ - 如何在 MFC 编辑器中对资源 ID 进行编辑以传播到代码?

c++ - 内部消息循环

c++ - 提取不同语言环境的年、月和日