Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为默认打印机设置纸张大小、方向和其他一些参数?_C++_Windows_Winapi_Printing_Mfc - Fatal编程技术网

C++ 如何为默认打印机设置纸张大小、方向和其他一些参数?

C++ 如何为默认打印机设置纸张大小、方向和其他一些参数?,c++,windows,winapi,printing,mfc,C++,Windows,Winapi,Printing,Mfc,让我解释一下我的困境。在我的C++/MFC应用程序中,我使用一个(基本上是一个IE active-x控件)来显示HTML内容 我的目标是为用户提供一个一键式的打印按钮,该按钮将打印网络浏览器控件中的HTML内容,假设可以在我的应用程序的选项页面中配置特定的打印选项,例如页面大小、边距、方向、打印质量等 不幸的是,WebBrowser控件似乎不支持很多打印定制。所以我不得不求助于“变通办法”: 我可以通过更改(我知道,这不是一个完美的解决方案,但至少是一个可行的解决方案)来实现WebBrowser

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

我的目标是为用户提供一个一键式的
打印
按钮,该按钮将打印
网络浏览器控件
中的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:我不想像那篇文章所建议的那样“弄乱”
自定义打印模板。