我写一个基于Dialog 的程序。想打印,我们知道在View/Document 中打印的处理,特别是所见既所得的打印处理相对简单。可是,现在我要在没有支持View/Document架构的Dialog程序中写打印的程序,是不是挺麻烦?怎样做?直接用打印的SDK?请高手指教一二。在下谢谢先。

解决方案 »

  1.   

    差不多了
    我也遇到了同样的问题 在codeproject看到这么一篇文章 算是把准备工作都做好了 剩下就看你了 ^^
    http://www.codeproject.com/printing/printing_wo_docview.asp
      

  2.   

    MFC Print preview extension DLL for dialogs
    27 Dec 2002
    An MFC extension library, so your dialogs can have easy print/print preview support. 
    http://www.codeproject.com/printing/PrintExtension.asp
      

  3.   

    //******************用API 打印成功!!!!!!!!!!!!!
        PRINTDLG pd;
    pd.lStructSize = sizeof(PRINTDLG);
    pd.Flags = PD_RETURNDC;
    pd.hDC = NULL;
    pd.hwndOwner = NULL;
    pd.hInstance = NULL;
    pd.nMaxPage = 1;
    pd.nMinPage = 1;
    pd.nFromPage = 1;
    pd.nToPage  = 1;
    pd.nCopies = 1;
    pd.hDevMode = NULL;
    pd.hDevNames = NULL; //显示打印对话框,由用户来设定纸张大小等。
    if(!PrintDlg(&pd)) 
    MessageBox("不能显示打印对话框"); 
    ASSERT(pd.hDC!=NULL); int nHorRes = GetDeviceCaps(pd.hDC, HORZRES);
    int nVerRes = GetDeviceCaps(pd.hDC, VERTRES);
    int nXMargin = 2;
    int nYMargin = 2;
    TEXTMETRIC tm;
    GetTextMetrics(pd.hDC, &tm);
    int nCharHeight = tm.tmHeight;
    int nCharWidth = tm.tmAveCharWidth;
    DOCINFO di;
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = "Lottery Printing"; 
    di.lpszOutput = (LPTSTR) NULL; 
    di.lpszDatatype = (LPTSTR) NULL; 
    di.fwType = 0; 
    StartDoc(pd.hDC, &di);
    StartPage(pd.hDC); TextOut(pd.hDC, 1, 1 , "要打印什么都行", 14);//一个汉字占2个字节
     
    EndPage(pd.hDC);
    EndDoc(pd.hDC);
    //打印结束
    DeleteDC(pd.hDC);
      

  4.   

    实践了一下 跟OnPrint里面用dc画图就成了..