数学建模社区-数学中国

标题: 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 ?. Rint 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()-&gt;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-&gt;dmFields = DevMode-&gt;dmFields|DM_PAPERSIZE;
( N+ f4 q. _0 k( I9 S  DevMode-&gt;dmFields = DevMode-&gt;dmFields|DM_PAPERLENGTH;
& Z( u5 Z8 s) v# ~$ q  DevMode-&gt;dmFields = DevMode-&gt;dmFields|DM_PAPERWIDTH;
! L/ ?, `% Z9 y  //设定要修改的值
5 n+ v( O& k. F2 M* X# ^  DevMode-&gt;dmPaperSize=DMPAPER_USER;//设为自定义纸张 & c* G7 p% k' B
  DevMode-&gt;dmPaperLength=length;
% K( [$ Q$ v% V4 D7 M  DevMode-&gt;dmPaperWidth=width; </P>6 m+ |% a9 N% _7 R3 W$ j, ]
<>  //测试打印
, C$ e, F2 m8 J. l) x2 H  Printer()-&gt;BeginDoc();
4 R) X1 m, a8 x# g7 m$ c  TextOut(Printer()-&gt;Handle, 0, 0, "-----------------",17);   u& e8 k# f8 P' |
  Printer()-&gt;NewPage();
6 U8 g0 Q" _7 S1 r+ R  I  TextOut(Printer()-&gt;Handle, 0, 0, "++++++++++++++++++",18); / [0 _' D; r5 c7 [4 ~
  Printer()-&gt;NewPage();
" I# n# V' S1 m; ]  Printer()-&gt;EndDoc(); / e8 G* P) n8 [' P0 R5 }
} </P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5