




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
解决在C程序中动态增加/更新自定义纸型的方法解决打印时,程序中动态添加纸型的问题是C中常见的难题,为了避免大家也走我一样的弯路,特将我的解决过程分享出来。在写过大量C代码后,大家都有一种同感,C类库功能极其强大,但总有部分不足。在前不久,为了满足众多客户对打印格式和纸型要求并不完全一致的需求,花了N个夜晚做了个的自定义套打的工具集,主要功能包括定制数据源由朋友HTTP/BLOGCSDNNET/WINDCSN/完成,根据数据源定制打印模板,根据打印模板和数据源参数进行打印。当然这里的重点不是说明该程序的功能。这里是说明如何在C中更有效的方法增加自定义纸型。刚开始我所想到的方法应当是大家都能想到的方法就是使用DLLIMPORT经过多次寻找,我找到了一个专门提供系统API在VB/VBNET/C中使用的网址HTTP/WWWWEBTROPYCOM/ARTICLES/ART91ASP在这里提供了ADDFORM,DELETEFORM等打印专用的API的DLLIMPORT方法,同时参考在微软网站上的打印纸型增加的方法如何在WINDOWSNT和WINDOWS2000中使用自定义页面大小打印文章内代码全是VB写的,无法在C中直接使用,怎么办呢改造成C吧。接下来就是改造过程,有一大堆的结构体要转换,还有一大堆的API要定义。苦啊,也罢问题能解决不就得了。等等。这里有这么两段CALLCOPYMEMORYAFI10,TEMP0,BYTESNEEDEDCALLCOPYMEMORYADEVMODE1,PDEVMODE,LENPDEVMODE晕,如何转COPYMEMORY呢在C中使用指针对我来说,并没有什么困难,但在C中,想使用指针还真费手脚。继续还是放弃暂时放弃吧,原因是VB也可以写COM的。而COM在C中使用比较简单,说干就干,开始使用MS的代码用VB写ATL控件,忙了半天,终于出来了,呵呵,主要是删截代码。在C中成功引用,并写出使用的代码,结果提示说类型不匹配什么地方类型不匹配呢无法跟踪,痛苦。再次放弃。重新回到C的DLLIMPORT上,研究INTPTR等,结果还是有种很难受的感觉。怎么办呢郁闷了两天,那两天可是周末的两天啊。经过两天痛苦之后,周一时重新理了下思路,还是从COM的路。不过换方向,使用VC吧。先定义了三个方法ADD,REMOVE,UPDATE,对我来说这三个方法已经足够了ADD用于增加纸型,REMOVE用于删除纸型,UPDATE当然是更新纸型大小了。用C写起来就是爽啊。很快几个方法就写好了。放在C代码中一试,增加纸型成功。在打印机的纸型列表中一看,没有真是奇怪了。这是怎么回事呢查询MSDN中关于FORM_INFO_1的说明,PNAMEPOINTERTOANULLTERMINATEDSTRINGTHATSPECIFIESTHENAMEOFTHEFORMSIZESPECIFIESTHEWIDTHANDHEIGHT,INTHOUSANDTHSOFMILLIMETERS,OFTHEFORMIMAGEABLEAREASPECIFIESTHEWIDTHANDHEIGHT,INTHOUSANDTHSOFMILLIMETERS,OFTHEFORM原来如此,我使用的代码中定义的自以为是1/100英寸为单位的,因为C类中说明PAGESIZE的大小是以1/100吋为单位的。这里尽然是1/1000毫米,真是气坏我了。到此,问题全部解决,纸型定义成功。部分代码1/PAPERCPPCPAPER的实现23INCLUDE“STDAFXH“4INCLUDE“PAPERH“5INCLUDE“PAPERH“6INCLUDE7INCLUDE8INCLUDE9PRAGMACOMMENTLIB,“COMSUPPLIB“1011IFNDEFCNW_DEBUG12DEFINECNW_DEBUG13ENDIF1415/CPAPER16NAMESPACECNETWARE171819STDMETHODIMPCPAPERADDINBSTRPRINTERNAME,INBSTRPAPERNAME,INLONGWIDTH,INLONGHEIGHT,LONGRET2021CHARSTRPRINTERNAME_COM_UTILCONVERTBSTRTOSTRINGPRINTERNAME22CHARSTRPAPERNAME_COM_UTILCONVERTBSTRTOSTRINGPAPERNAME23HANDLEPPRINTER24RETOPENPRINTERSTRPRINTERNAME,2526IFRETFALSEGOTOEND_ADD27IFGETINDEXPPRINTER,STRPAPERNAME12829CLOSEPRINTERPPRINTER30RETFALSE31GOTOEND_ADD323334FORM_INFO_1AFI135AFI1FLAGS036AFI1PNAMESTRPAPERNAME37AFI1SIZECXWIDTH38AFI1SIZECYHEIGHT39AFI1IMAGEABLEAREALEFT040AFI1IMAGEABLEAREATOP041AFI1IMAGEABLEAREARIGHTWIDTH42AFI1IMAGEABLEAREABOTTOMHEIGHT4344RETADDFORMPPRINTER,1,LPBYTE45CLOSEPRINTERPPRINTER4647END_ADD48IFRETFALSERETURNS_FALSE49RETURNS_OK5051INTCPAPERGETINDEXHANDLEHPRINTER,LPSTRPAPERNAME5253DWORDDWNEEDED,DWRETURNED54FORM_INFO_1AFI155BOOLBRET56BYTETEMP57INTINDEX15859AFI1FORM_INFO_1NEWBYTESIZEOFFORM_INFO_160BRETENUMFORMSHPRINTER,1,LPBYTE61DELETEBYTEAFI162TEMPNEWBYTEDWNEEDED63AFI1FORM_INFO_1NEWBYTEDWNEEDED64BRETENUMFORMSHPRINTER,1,TEMP,DWNEEDED,6566COPYMEMORYAFI1,TEMP,DWNEEDED6768FORINTI0I8/PAPERFORM的摘要说明。9/10PUBLICCLASSPAPERFORM1112PRIVATESTATICPRINTCOMCPAPERCLASSCPNEWPRINTCOMCPAPERCLASS1314PRIVATEPAPERFORM1516/17/TODO在此处添加构造函数逻辑18/1920/如果存在则更新,不存在则增加21/22/向指定的打印机增加纸型23/24/打印机名称25/纸型名称26/单位1/1000毫米27/单位1/1000毫米28/检查纸型是否存在于当前纸型集合中。29PUBLICSTATICBOOLADDSTRINGPRINTERNAME,STRINGFORMNAME,INTWIDTH,INTHEIGHT,PRINTERSETTINGSPAPERSIZECOLLECTIONPAPERSIZES3031FOREACHPAPERSIZEPSINPAPERSIZES3233IFPSPAPERNAMEFORMNAME3435THROWNEWEXCEPTIONFORMNAME“已经存在,请使用UPDATE更新。“363738IFCPADDNULL,FORMNAME,WIDTH,HEIGHT13940RETURNTRUE4142ELSE4344RETURNFALSE45464748/49/移除纸型。50/51/打印机名称52/纸型名称53/检查纸型是否存在于当前纸型集合中。54PUBLICSTATICBOOLREMOVESTRINGPRINTERNAME,STRINGFORMNAME,PRINTERSETTINGSPAPERSIZECOLLECTIONPAPERSIZES5556IFCPREMOVENULL,FORMNAME15758RETURNTRUE5960ELSE6162RETURNFALSE63646566/67/修改指定打印中的纸型大小。68/69/打印机名称70/纸型名称71/单位1/1000毫米72/单位1/1000毫米73/检查纸型是否存在于当前纸型集合中。74PUBLICSTATICBOOLUPDATESTRINGPRINTERNAME,STRINGFORMNAME,INTWIDTH,INTHEIGHT,PRINTERSETTINGSPAPERSIZECOLLECTIONPAPERSIZES7576/FOREACHPAPERSIZEPSINPAPERSIZES77/78/IFPSPAPE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食品工业升级新篇章:2025年传统生产技术改造技术革新趋势报告
- 2025年工业互联网平台边缘计算硬件架构在智慧医疗设备中的应用前景报告
- 2025年环境影响评价公众参与机制在环境友好型能源利用中的推广报告
- 中医药现代化进程中国际市场中医学术交流与合作市场研究报告
- 电竞俱乐部运营管理提升与品牌价值构建研究报告2025
- (公司)行政部总结及工作设想
- 2025年物联网智能家居系统集成创新成果鉴定报告
- 施工工地防火管理制度
- 双层振动筛设备管理制度
- 广东省农村公厕管理制度
- 2025年福建省中考历史试卷真题(含标准答案)
- 2025年6月15日青海省事业单位面试真题及答案解析
- 单体药店GSP质量管理制度
- 2025年江苏省高考化学试卷真题
- (网络+收集版)2025年高考全国二卷语文高考真题文档版(无答案)
- 室内妇科诊室管理制度
- 国家开放大学2025年《创业基础》形考任务4答案
- 房屋安全鉴定服务投标方案
- 2025年4月版安全法律法规标准文件清单
- 2023年成都兴华生态建设开发有限公司招聘笔试模拟试题及答案解析
- INDITEX集团公司生产商和供应商行为准则中文
评论
0/150
提交评论