设置用于打印C++的 GDI 页面设置
Set GDI page settings for printing C++
我在为文档设置"默认"页面大小时遇到问题。我在Windows上使用Visual C++,带有GDI调用(向后兼容所必需的)。
到目前为止,我的基本方法是获取默认DEVMODE
,在其上设置我想要的属性,然后提示用户是否要更改它。但它似乎对页面大小没有影响。它适用于方向。
我做错了什么?
HDC GetPrinterDC () {
// Initialize device
PRINTDLG pd = {0};
pd.lStructSize = sizeof( pd );
pd.Flags = PD_RETURNDEFAULT;
PrintDlg(&pd);
// If device initialization failed, abort
if (pd.hDevMode == NULL) return NULL;
// Get the actual memory pointer
PDEVMODE dm = (PDEVMODE)GlobalLock(pd.hDevMode);
if (dm) {
// Set any properties that are specific for our document
if (dm->dmFields & DM_ORIENTATION)
dm->dmOrientation = DMORIENT_LANDSCAPE;
if (dm->dmFields & DM_PAPERSIZE)
dm->dmPaperSize = 0;
if (dm->dmFields & DM_PAPERLENGTH)
dm->dmPaperLength = 3302; // 13in
if (dm->dmFields & DM_PAPERWIDTH)
dm->dmPaperWidth = 4572; // 18in
GlobalUnlock(pd.hDevMode);
}
// Initialize a PRINTDLG structure.
pd.hwndOwner = GetForegroundWindow();
pd.Flags = PD_RETURNDC | PD_HIDEPRINTTOFILE | PD_DISABLEPRINTTOFILE | PD_NOPAGENUMS | PD_NOSELECTION | PD_USEDEVMODECOPIESANDCOLLATE ;
// Retrieve the printer DC
HDC hdc = NULL;
if (PrintDlg(&pd)) hdc = pd.hDC;
// Free the resources allocated
if (pd.hDevMode != NULL) GlobalFree(pd.hDevMode);
if (pd.hDevNames != NULL) GlobalFree(pd.hDevNames);
return hdc;
}
显然,
您可以在DEVMODE
结构中指定dmFields
为您想要的任何内容。
代码应如下所示:
PDEVMODE dm = (PDEVMODE)GlobalLock(pd.hDevMode);
if (dm) {
// Set any properties that are specific for our document
dm->dmFields = dm->dmFields | DM_ORIENTATION | DM_PAPERSIZE
| DM_PAPERLENGTH | DM_PAPERWIDTH;
dm->dmOrientation = DMORIENT_LANDSCAPE;
dm->dmPaperSize = 0;
dm->dmPaperLength = 3302; // 13in
dm->dmPaperWidth = 4572; // 18in
GlobalUnlock(pd.hDevMode);
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何在C++中为 Windows 的 GDI 正确设置库?
- 在加载页面时,如何为iwebbrowser2设置背景颜色
- 转到特定页面后,如何将滑动视图的当前索引设置为选项卡栏"by reference"的当前索引?
- 设置 QWizard 页面的按钮宽度
- 当我使用 DirectWrite 在 GDI hdc 上绘制文本时,如何设置透明背景
- 以编程方式在 IE 中设置页面缩放和文本大小
- 设置用于打印C++的 GDI 页面设置