搜索
查看: 5130|回复: 2

[扩展库] 调用通用打印对话框

[复制链接]

2

主题

13

帖子

221

积分

二级会员

Rank: 3Rank: 3

积分
221
发表于 2014-10-20 21:27:11 | 显示全部楼层 |阅读模式
补充下通用对话框..
printer.aau
  1. //打印对话框

  2. printer = class {
  3.         ctor(hParent,option){
  4.                 var cc = PRINTDLG();
  5.                 cc.lStructSize = ..raw.sizeof(cc);       
  6.                 cc.hwndOwner = hParent[["hwnd"]] : hParent;  
  7.                 //cc.hDC=::GetDC( hParent[["hwnd"]] )
  8.                  ..table.assign(cc,option );
  9.                 cc.hDevMode=..raw.buffer(DEVMODE());
  10.                 cc.hDevNames=..raw.buffer(128);
  11.           
  12.           
  13.         }
  14.         print= function(){
  15.                 var re = printdlgA(cc);
  16.                 return re;
  17.         }
  18.    DevMode=function(){
  19.    
  20.            var DevModes = ..raw.convert(cc.hDevMode ,DEVMODE())
  21.            return DevModes;
  22.    }
  23.    DevNames=function(){
  24.                              var hD = ..raw.convert(cc.hDevNames ,DEVNAMES());
  25.                              tmp=..raw.buffer(128);
  26.                              ::CopyMemory(tmp,hD.startA,128);                    
  27.                      
  28.           return ..raw.tostring(tmp,hD.wDeviceOffset-7),..raw.tostring(tmp,hD.wOutputOffset-7),hD.startA
  29.          
  30.            }
  31.                
  32. }

  33. var dll = ..raw.loadDll("comdlg32.dll");
  34. namespace printer{
  35.         printdlgA= dll.api("PrintDlgA", "INT(struct &lppd)");       
  36.         PRINTDLG = class{
  37.         INT lStructSize=66;
  38.   int hwndOwner;
  39.   pointer hDevMode;
  40.   pointer hDevNames;
  41.   pointer hDC;
  42.   INT Flags=0;
  43.   WORD nFromPage=0;
  44.   WORD nToPage=0;
  45.   WORD nMinPage=0;
  46.   WORD nMaxPage=0;
  47.   WORD nCopies=1;
  48.   pointer hInstance;
  49.   int lCustData;
  50.   pointer lpfnPrintHook;
  51.   pointer lpfnSetupHook;
  52.   string lpPrintTemplateName;
  53.   string lpSetupTemplateName;
  54.   int hPrintTemplate;
  55.   int hSetupTemplate;
  56.     _struct_aligned = 1;
  57.    }
  58.    class DEVMODE {
  59.         BYTE dmDeviceName[32];
  60.         WORD dmSpecVersion;
  61.         WORD dmDriverVersion;
  62.         WORD dmSize;
  63.         WORD dmDriverExtra;
  64.         INT dmFields;
  65.        
  66.         word dmOrientation;
  67.         word dmPaperSize;
  68.         word dmPaperLength;
  69.         word dmPaperWidth;
  70.         word dmScale;
  71.         word dmCopies;
  72.         word dmDefaultSource;
  73.         word dmPrintQuality;
  74.        
  75.         word dmColor;
  76.         word dmDuplex;
  77.         word dmYResolution;
  78.         word dmTTOption;
  79.         word dmCollate;
  80.         BYTE dmFormName[32];
  81.         WORD dmLogPixels;
  82.         INT dmBitsPerPel;
  83.         INT dmPelsWidth;
  84.         INT dmPelsHeight;
  85.        
  86.         INT dmDisplayFlags;
  87.        
  88.         INT dmDisplayFrequency;
  89.         INT dmICMMethod;
  90.         INT dmICMIntent;
  91.         INT dmMediaType;
  92.         INT dmDitherType;
  93.         INT dmReserved1;
  94.         INT dmReserved2;
  95.         _struct_aligned = 1;
  96.         pointer xxx;
  97.         pointer xxx2;
  98. }
  99. class DEVNAMES {
  100.         WORD wDriverOffset;
  101.         WORD wDeviceOffset;
  102.         WORD wOutputOffset;
  103.         WORD wDefault;
  104.         BYTE startA[100];
  105. }
  106. }
  107. /**intellisense()
  108. printer = 通用打印对话框
  109. printer(winform__/*父窗体*/) = 创建通用打印对话框
  110. printer().print() = 弹出选择打印对话框
  111. printer().DevMode() = 返回hDevMode结构,例如hDevMode["dmDeviceName"]
  112. printer().DevNames() = 返回 hDevNames,结果1是打印机名,2是端口,3是winspool
  113. end intellisense**/
复制代码


测试代码.aau:
  1.        
  2. import win.ui;
  3. /*DSG{{*/
  4. var winform = ..win.form(text="aardio Form";right=599;bottom=399)
  5. winform.add()
  6. /*}}*/

  7. import printer;
  8. printx=printer(winform);
  9. printx.print()
  10. dd=printx.DevMode()
  11. dce,dport,der=printx.DevNames()       

  12. import console
  13. console.varDump(dd["dmDeviceName"],der,dce,dport)
  14. winform.show()
  15. win.loopMessage();
复制代码
回复

使用道具 举报

0

主题

31

帖子

344

积分

培训班

积分
344
QQ
发表于 2014-10-21 22:46:15 | 显示全部楼层

不错,先收藏着。

不错,先收藏着。
回复

使用道具 举报

7

主题

86

帖子

589

积分

三级会员

Rank: 4

积分
589
发表于 2014-10-23 13:55:51 | 显示全部楼层

学习一下, 感谢分享

学习一下, 感谢分享
本人男,爱好女!
http://www.hxcarrot.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2021-1-25 03:46 , Processed in 0.062500 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表