Windows自定义打印的实现.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows自定义打印的实现

Windows自定义打印的实现之一 其实在Windwos中调用Windows API实现打印是比较简单的,而且具有代码紧凑、实现灵活的优点。我们只要掌握了几个要点,就可以随心所欲的打印了。下面我们将一一讨论: 打印机的选择,打印设置对话框的调用 在程序中设置打印选项 打印单位的转换 打印基本流程 打印字体的设置 打印机的选择,打印设置对话框的调用 这个不多说了,相关的主要API只有一个--PrintDlg(LPPRINTDLG lppd)--看例子代码。 PRINTDLG printInfo; ZeroMemory(printInfo,sizeof(printInfo)); //清空该结构 printInfo.lStructSize = sizeof(printInfo); printInfo.hwndOwner = 0; printInfo.hDevMode = 0; printInfo.hDevNames = 0; //这个是关键,PD_RETURNDC 如果不设这个标志,就拿不到hDC了 // PD_RETURNDEFAULT 这个就是得到默认打印机,不需要弹设置对话框 printInfo.Flags = PD_RETURNDC | PD_RETURNDEFAULT; //调用API拿出默认打印机 PrintDlg(printInfo); //看看出错没有 DWORD rst = CommDlgExtendedError(); if(rst != 0) { //出错了,清空标志再次调用API,此时就会弹出打印设置对话框供用户选择了 printInfo.Flags = 0; PrintDlg(printInfo); } 从上面的代码,我们就知道弹不弹对话框的关键是设置PRINTDLG结构的Flags字段。 在程序中设置打印选项 要想在程序中定制我们的打印选项,DEVMODE结构就是关键了。在这里我们只举例如何为打印设定自定义纸张。更详细的设置信息可以查询MSDN。 //首先得到DEVMODE结构,同时申请系统锁定,我们要修改它了 LPDEVMODE lpDevMode = (LPDEVMODE)::GlobalLock(printInfo.hDevMode); if(lpDevMode) //成功得到该结构了 { lpDevMode-dmPaperSize = DMPAPER_USER; //自定义纸张 //设定自定义纸张标志 lpDevMode-dmFields = lpDevMode -dmFields | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH; lpDevMode-dmPaperWidth = (short)width; //纸宽多少 lpDevMode-dmPaperLength = (short)height; //纸高多少 //顺便设定纸张走纸方向,横向还是纵向 lpDevMode-dmOrientation = DMORIENT_PORTRAIT; } //记住要解锁 GlobalUnlock(printInfo.hDevMode); //这个也不能忘了,否则更改不会生效 ResetDC(printInfo.hDC, lpDevMode); Windows自定义打印的实现之二 打印单位的转换 这个的关键是我们要得到显示设备的DPI,即每英寸设备支持的点数。有了DPI我们就可以在我们习惯的单位和设备单位之间转换了,用到的API是GetDeviceCaps(),这个函数功能强大,具体可参考MSDN,在这里我们只用来得到设备DPI。看示例代码: //某些设备水平和垂直方向的DPI可能不同,所以要分别得到。 //得到水平方向的转换比例 float getXScale(HDC printDC) //printDC: 打印机DC设备句柄 { //得到打印机水平方向的DPI int xDPI = GetDeviceCaps(printDC, LOGPIXELSX); //254.0

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档