如何为默认打印机设置纸张尺寸,方向和一些其他参数?

时间:2015-12-30 06:59:04

标签: c++ windows winapi printing mfc

让我解释一下我的困境。在我的C ++ / MFC应用程序中,我使用WebBrowser control(基本上是IE active-x控件)来显示HTML内容。

我的目标是为用户提供一键式Print按钮,该按钮将打印来自WebBrowser control的HTML内容,假设具体的打印选项,例如页面大小,页边距,方向,可以在我的应用的Options页面中配置的打印质量等。

不幸的是,WebBrowser control似乎并不支持大量的打印自定义。所以我不得不求助于"变通办法":

我可以通过system registry中的更改实现WebBrowser control的一些自定义(我知道,它不是一个完美的解决方案,但至少它是'我正在工作,我可以快速将默认打印机更改为我的程序的用户设置中所要求的打印机,打印页面,然后将默认打印机重置为以前的打印机是

所有这些都在一个方法中完成:

//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()

所以这适用于纸张边距。我需要做的是更改默认打印机的打印设置,如纸张尺寸,方向和质量等。我知道它通常是通过DEVMODE结构来完成的。

我可以在全球范围内更改DEVMODE - 默认打印机的类型设置吗?

0 个答案:

没有答案