c 程序中动态增加更新自定义纸型的方法

c 程序中动态增加更新自定义纸型的方法

ID:19512546

大小:366.00 KB

页数:13页

时间:2018-10-03

c 程序中动态增加更新自定义纸型的方法_第1页
c 程序中动态增加更新自定义纸型的方法_第2页
c 程序中动态增加更新自定义纸型的方法_第3页
c 程序中动态增加更新自定义纸型的方法_第4页
c 程序中动态增加更新自定义纸型的方法_第5页
资源描述:

《c 程序中动态增加更新自定义纸型的方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、窗体顶端解决在C#程序中动态增加/更新自定义纸型的方法   解决打印时,程序中动态添加纸型的问题是C#中常见的难题,为了避免大家也走我一样的弯路,特将我的解决过程分享出来。   在写过大量C#代码后,大家都有一种同感,C#类库功能极其强大,但总有部分不足。在前不久,为了满足众多客户对打印格式和纸型要求并不完全一致的需求,花了N个夜晚做了个的自定义套打的工具集,主要功能包括:定制数据源(由朋友http://blog.csdn.net/windcsn/完成),根据数据源定制打印模板,根据打印模板和数据源参数进行打印。

2、   当然这里的重点不是说明该程序的功能。这里是说明如何在C#中更有效的方法增加自定义纸型。   刚开始我所想到的方法应当是大家都能想到的方法:就是使用DllImport.   经过多次寻找,我找到了一个专门提供系统API在VB/VB.net/C#中使用的网址:   http://www.webtropy.com/articles/art9-1.asp   在这里提供了AddForm,DeleteForm等打印专用的API的DllImport方法,   同时参考在微软网站上的打印纸型增加的方法:    如何在Wi

3、ndowsNT和Windows2000中使用自定义页面大小打印       文章内代码全是VB写的,无法在C#中直接使用,怎么办呢?改造成C#吧。   接下来就是改造过程,有一大堆的结构体要转换,还有一大堆的API要定义。苦啊,也罢问题能解决不就得了。   等等。这里有这么两段:  CallCopyMemory(aFI1(0),Temp(0),BytesNeeded)  CallCopyMemory(aDevMode(1),pDevMode,Len(pDevMode))   晕,如何转CopyMemory呢?在C

4、++中使用指针对我来说,并没有什么困难,但在C#中,想使用指针还真费手脚。继续还是放弃?   暂时放弃吧,原因是VB也可以写COM的。而COM在C#中使用比较简单,说干就干,开始使用MS的代码用VB写ATL控件,忙了半天,终于出来了,呵呵,主要是删截代码。   在C#中成功引用,并写出使用的代码,结果提示说类型不匹配?什么地方类型不匹配呢?无法跟踪,痛苦。再次放弃。   重新回到C#的DllImport上,研究IntPtr等,结果还是有种很难受的感觉。怎么办呢?郁闷了两天,那两天可是周末的两天啊。   经过两天痛

5、苦之后,周一时重新理了下思路,还是从COM的路。不过换方向,使用VC++吧。   先定义了三个方法:   Add,Remove,Update,对我来说这三个方法已经足够了   Add用于增加纸型,Remove用于删除纸型,Update当然是更新纸型大小了。   用C++写起来就是爽啊。很快几个方法就写好了。   放在C#代码中一试,增加纸型成功。    在打印机的纸型列表中一看,没有?真是奇怪了。这是怎么回事呢?    查询MSDN中关于FORM_INFO_1的说明,   pNamePointertoanull-

6、terminatedstringthatspecifiesthenameoftheform.SizeSpecifiesthewidthandheight,inthousandthsofmillimeters,oftheform.ImageableAreaSpecifiesthewidthandheight,inthousandthsofmillimeters,oftheform.     原来如此,我使用的代码中定义的自以为是1/100英寸为单位的,因为C#类中说明PageSize的大小是以1/100吋为单位的。

7、这里尽然是1/1000毫米,真是气坏我了。到此,问题全部解决,纸型定义成功。    部分代码:       1// Paper.cpp : CPaper 的实现  2  3#include "stdafx.h"  4#include "Paper.h"  5#include ".paper.h"  6#include   7#include   8#include   9#pragma comment(lib, "comsupp.lib") 10 

8、11#ifndef CNW_DEBUG 12#define CNW_DEBUG 13#endif 14 15// CPaper 16namespace CNetware 17{ 18 19STDMETHODIMP CPaper::Add(IN BSTR  printerName,IN BSTR  paperName, IN LONG width,IN LONG heigh

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。