我做的程序主要是打印单据,打印操作频繁,但是每次打印,总出现打印对话框,然后才打印,怎样不出现打印对话框,直接进行打印,(SDI 支持打印和打印预览)

解决方案 »

  1.   

    本站以往相关print控制的方法文章:
    PowerPrint 1.1 DLL(最老牌的dll文件,几年以前本站独家提供的,现在已经被广泛使用) 
    http://www.pdriver.com/display.asp?key_id=1084在win2000/xp/2003server中自定义纸张打印票据  这是通过输出打印机控制命令来控制针式打印机的,通用性不够好。
    http://www.pdriver.com/display.asp?key_id=1537
    正文:
    作者:李刚 email: [email protected] 
    下载2003/12/26月最新版本 www.pdriver.com/pb03/12/printNewCtrl.rar (size :125kb) 已增加功能:
    增加了获得打印作业的功能,同时可以对打印作业进行控制,例如:暂停,恢复,取消,重新开始等。
    关于无法获得当前打印机是否缺纸的问题,我发现在Windows中也没有直接获得打印机是否缺纸的功能,但如果你将文档送到打印机,在打印机队列管理中的状态中可以看见有缺纸的提示。所以,我建议各位如何想监视是否缺纸,可以通过获得打印机打印作业,然后分析状态中有没有缺纸的状态信息就可以了!
    下载:www.pdriver.com/pb03/12/printctrl.rar (size:78kb) pb7版本 (兼容所有pb版本, rar中已经包括有dll文件)
    下载:www.pdriver.com/pb03/12/printctrl_vc.rar vc写的dll源代码。关于编译的时候出错请见本文最下方的所示:
    内有作者李刚 VC 6 写的 dll 源代码,当然还有 pb7 写的调用 dll 的示例。中间有一些很强的功能。 
    “增加自定义纸张” - 这个功能是对 2000/xp 来使用的,是其它很多 DLL 没有的功能。
     
    点击增加自定义纸张以后,让我们来看看打印机的属性中增加了什么内容: 
     
     
     
    增加的纸张名称,宽度 / 高,左 / 右,上 / 下等值都是在程序中增加的:如下,是 pb 中调用的代码: 
    string paperName = " 试验纸张类型 " 
    string printerName = "" 
    boolean rt 
    long w,h,l,r,t,b 
    w = 2000 
    h = 1500 
    l = 10 
    r = 10 
    t = 20 
    b = 20 
    if lb_1.TotalItems ( )<=0 then 
    messagebox(""," 没有打印机列表,请执行 < 获得打印机列表 > 功能 ") 
    return 
    end if 
    printerName = lb_1.SelectedItem () 
    if printerName="" then 
    messagebox(""," 请选择一个打印机! ") 
    return 
    end if 
    rt = AddCustomPaper(ref printerName, ref PaperName, w, h, l, r, t, b) 
    if rt then 
    messagebox(""," 成功 ") 
    else 
    messagebox(""," 失败 ") 
    end if 
    在平时的打印中除了可以在程序中选择纸张外,在 windows 系统中也能见到此打印纸张: 
     
     
    关于源代码编译的时候会提示出错,请按作者 所示进行如下修改
    看来这个问题不仅仅我碰到了,我不知道vc6的winspool.h中为什么没有定义这个函数,但winspool.lib中确实有这个函数。
    打开你的winspool.h,将如下代码添加到文件末尾#ifdef __cplusplus这句话的前面,保存重新编译就可以了。
    BOOL 
    WINAPI 
    SetDefaultPrinterA(
           LPCTSTR pszPrinter
           );
    BOOL 
    WINAPI 
    SetDefaultPrinterW(
           LPCTSTR pszPrinter
           );
    #ifdef UNICODE
    #define SetDefaultPrinter  SetDefaultPrinterW
    #else
    #define SetDefaultPrinter  SetDefaultPrinterA
    #endif // !UNICODE
    转载须知
      

  2.   

    很简单
    在OnPreparePrinting(CPrintInfo* pInfo) 中
    pInfo->m_bDirect = true;
      

  3.   

    打印对话框其实我们用,只是为了得到打印机DC,如果别的方法得到了打印机DC,那打印对话框就不是太需要了。关于如何不用打印对话框得到打印机DC:
    到文档中心用"打印机"搜,有篇文章好像叫"VC下使用打印机"的,就是它了.
      

  4.   

    今天闲得很,帮你找了。
    http://www.csdn.net/Develop/Read_Article.asp?Id=4844
    我以前写打印图片就是这样干的。
      

  5.   

    重写 virtual BOOL OnPreparePrinting(CPrintInfo* pInfo)
    然后在return DoPreparePrinting(pInfo);前加上如下语句:
    pInfo->m_bDirect = TRUE;
    不过你要对打印参数设置好