数学建模社区-数学中国
标题:
C++Builder编程中动态更改自定义打印纸张
[打印本页]
作者:
韩冰
时间:
2005-1-26 12:24
标题:
C++Builder编程中动态更改自定义打印纸张
<
>因网上只有Delphi例子本人在用CB编写时发现有一些例子不能用,
6 w% a# y" l( U4 s
所以一生气就索性查了查资料自己写了,怕网友们在用编程时也遇见此类情况,
~4 q; m* d6 ]. u1 { _3 p
就马上传了上来。 </P>
' s* U8 h7 `$ W$ A1 ]4 `- L# j
<
>void __fastcall TForm1::BitBtn1Click(TObject *Sender)
, L, b0 I6 _7 c- z4 ]( v
{
2 r7 }, N4 L+ |5 n4 x/ S
char *ADevice, *ADriver, *APort;
; O1 Y( k" ` X5 E) U# D5 k6 i
THandle DeviceMode;
3 W' n* I; D7 A- A; Z' [
PDeviceMode DevMode;
, e+ L r0 ^4 F# @! k3 Y6 ?. R
int length,width;
! d H! B h- J: R% n
length=1400;
6 M6 Z( }; f3 b5 B5 S5 v7 y" T
width=2410;//设定自定义纸张的尺寸单位为0.1毫米
5 s5 y8 Q+ |% L
ADevice =new char[100];
% t% b6 q# f, ~7 d5 d+ M
ADriver =new char[100];
! H- m7 a% K2 T8 g- j+ `5 N
APort =new char[100];
: T1 P3 N6 B; m
//获取打印机
6 U7 E: Y6 D! Q
Printer()->GetPrinter(ADevice, ADriver, APort,DeviceMode);
5 ^" }8 Z) V0 N- e) c
//获取PDevMode结构
5 x) V0 o8 R; x' o* J
DevMode =(_devicemodeA*) GlobalLock((void *)DeviceMode);
4 Q- _. D/ E: ?) q6 S& X$ l! W* G
//设定可以修改的值
* t! m( o0 W3 T; O) P
DevMode->dmFields = DevMode->dmFields|DM_PAPERSIZE;
( N+ f4 q. _0 k( I9 S
DevMode->dmFields = DevMode->dmFields|DM_PAPERLENGTH;
& Z( u5 Z8 s) v# ~$ q
DevMode->dmFields = DevMode->dmFields|DM_PAPERWIDTH;
! L/ ?, `% Z9 y
//设定要修改的值
5 n+ v( O& k. F2 M* X# ^
DevMode->dmPaperSize=DMPAPER_USER;//设为自定义纸张
& c* G7 p% k' B
DevMode->dmPaperLength=length;
% K( [$ Q$ v% V4 D7 M
DevMode->dmPaperWidth=width; </P>
6 m+ |% a9 N% _7 R3 W$ j, ]
<
> //测试打印
, C$ e, F2 m8 J. l) x2 H
Printer()->BeginDoc();
4 R) X1 m, a8 x# g7 m$ c
TextOut(Printer()->Handle, 0, 0, "-----------------",17);
u& e8 k# f8 P' |
Printer()->NewPage();
6 U8 g0 Q" _7 S1 r+ R I
TextOut(Printer()->Handle, 0, 0, "++++++++++++++++++",18);
/ [0 _' D; r5 c7 [4 ~
Printer()->NewPage();
" I# n# V' S1 m; ]
Printer()->EndDoc();
/ e8 G* P) n8 [' P0 R5 }
} </P>
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5