数学建模社区-数学中国
标题:
C++Builder编程中动态更改自定义打印纸张
[打印本页]
作者:
韩冰
时间:
2005-1-26 12:24
标题:
C++Builder编程中动态更改自定义打印纸张
<
>因网上只有Delphi例子本人在用CB编写时发现有一些例子不能用,
1 _7 S% T4 k' V& A. j: l
所以一生气就索性查了查资料自己写了,怕网友们在用编程时也遇见此类情况,
4 o) q* F- J. y# p7 a% u4 Z6 j
就马上传了上来。 </P>
$ |9 n3 k$ I2 c
<
>void __fastcall TForm1::BitBtn1Click(TObject *Sender)
) m1 v. Z2 h2 l/ `5 R
{
8 z. C$ `) x# f7 F; `
char *ADevice, *ADriver, *APort;
5 i! e N$ \1 N& K
THandle DeviceMode;
8 V" M7 B/ Z9 Z( v7 g
PDeviceMode DevMode;
0 G+ Q8 i- Q- C3 i0 p7 E
int length,width;
6 Q. d. g8 m# Q/ _
length=1400;
! \- v" y9 z Z
width=2410;//设定自定义纸张的尺寸单位为0.1毫米
. E/ \& E- l" B4 u, ]
ADevice =new char[100];
) S3 P0 O8 |# b& c) ]- G
ADriver =new char[100];
0 ]8 e% Z/ f5 T0 x) |- s4 f
APort =new char[100];
! A9 D. t( G3 P" Y8 _& ^
//获取打印机
% `# l3 Q! w3 E+ f1 O3 B5 [ ^
Printer()->GetPrinter(ADevice, ADriver, APort,DeviceMode);
4 h% K/ W7 g6 l, `' r
//获取PDevMode结构
. _, p' F8 |- `& p6 p
DevMode =(_devicemodeA*) GlobalLock((void *)DeviceMode);
/ f3 O( Z- |$ {8 r8 ]) y$ i
//设定可以修改的值
7 r4 J2 D2 C k" s |* q" j/ B( @
DevMode->dmFields = DevMode->dmFields|DM_PAPERSIZE;
+ {+ r5 w& J" ]' l7 R4 J
DevMode->dmFields = DevMode->dmFields|DM_PAPERLENGTH;
1 _1 S2 ?1 H1 M3 z" ~
DevMode->dmFields = DevMode->dmFields|DM_PAPERWIDTH;
' r5 V) f" n) Q. `
//设定要修改的值
# w' l/ f: Z% d c, K% g8 ^
DevMode->dmPaperSize=DMPAPER_USER;//设为自定义纸张
3 i2 G+ g3 o% `9 p/ z# \
DevMode->dmPaperLength=length;
6 C" M" @6 F3 R3 _' Y9 |) F
DevMode->dmPaperWidth=width; </P>
* R( s* C' i0 ] X# o* q# n+ ~
<
> //测试打印
" p8 w) r5 Q4 A1 B, a6 y
Printer()->BeginDoc();
0 b$ R+ m6 R( @- h+ ?! v
TextOut(Printer()->Handle, 0, 0, "-----------------",17);
; }. f5 [1 l4 F! u7 l& ~. ]
Printer()->NewPage();
8 a7 F* l/ S+ U7 S1 p
TextOut(Printer()->Handle, 0, 0, "++++++++++++++++++",18);
' a1 A/ X0 a' E( j$ S) f3 W
Printer()->NewPage();
! I' I, |( L5 y0 j3 G# Y1 f
Printer()->EndDoc();
2 Z! w. N, a9 N5 I; h
} </P>
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5