C++ 如何为默认打印机设置纸张大小、方向和其他一些参数?
让我解释一下我的困境。在我的C++/MFC应用程序中,我使用一个(基本上是一个IE active-x控件)来显示HTML内容 我的目标是为用户提供一个一键式的C++ 如何为默认打印机设置纸张大小、方向和其他一些参数?,c++,windows,winapi,printing,mfc,C++,Windows,Winapi,Printing,Mfc,让我解释一下我的困境。在我的C++/MFC应用程序中,我使用一个(基本上是一个IE active-x控件)来显示HTML内容 我的目标是为用户提供一个一键式的打印按钮,该按钮将打印网络浏览器控件中的HTML内容,假设可以在我的应用程序的选项页面中配置特定的打印选项,例如页面大小、边距、方向、打印质量等 不幸的是,WebBrowser控件似乎不支持很多打印定制。所以我不得不求助于“变通办法”: 我可以通过更改(我知道,这不是一个完美的解决方案,但至少是一个可行的解决方案)来实现WebBrowser
打印
按钮,该按钮将打印网络浏览器控件
中的HTML内容,假设可以在我的应用程序的选项
页面中配置特定的打印选项,例如页面大小、边距、方向、打印质量等
不幸的是,WebBrowser控件
似乎不支持很多打印定制。所以我不得不求助于“变通办法”:
我可以通过更改(我知道,这不是一个完美的解决方案,但至少是一个可行的解决方案)来实现WebBrowser控件的一些自定义功能。同时,我还可以快速将默认打印机更改为程序的用户设置中要求的打印机,打印页面,并将默认打印机重置回原来的状态
这几乎都是通过这样一种方法完成的:
//Pseudo-code
//1. Remember old default printer by calling GetDefaultPrinter()
//2. Remember old values in 'HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup' registry key
//3. Set page margins by changing 'HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup' registry key
//4. Set default printer by calling SetDefaultPrinter()
//5. Print contents of the WebBrowser control to a default printer
// w/o showing IE's print window, but make sure to call it synchronously:
COleVariant varNull;
COleVariant var1;
var1.vt = VT_I2;
var1.iVal = PRINT_WAITFORCOMPLETION; //Value of 2
m_browser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, var1, varNull);
//6. Restore values in 'HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup' registry key
//7. Restore old default printer by calling SetDefaultPrinter()
所以这适用于纸质页边距。我需要完成的是更改默认打印机的打印设置,例如纸张大小、方向和质量。我知道它通常是通过struct完成的
因此,我可以更改全局范围内默认打印机的DEVMODE
-类型设置吗?重复:?(这个问题是c#,但是链接的文档是c++)。@MartinBonner:这个问题没有说明如何设置默认打印机的参数。我遗漏了什么吗?但是您不需要设置默认打印机的参数,是吗?这只是一个拙劣的解决办法,因为网络控制缺乏可配置性。@MartinBonner:我不想像那篇文章建议的那样“弄乱”自定义打印模板。重复:?(这个问题是c#,但是链接的文档是c++)。@MartinBonner:这个问题没有说明如何设置默认打印机的参数。我遗漏了什么吗?但是您不需要设置默认打印机的参数,是吗?由于网络控制缺乏可配置性,这只是一个棘手的问题。@MartinBonner:我不想像那篇文章所建议的那样“弄乱”自定义打印模板。