你为什么要用SDK?我前些日子写存折打印是苦恼透了,到处求代码,没有人理我,只好到网上去求了,如果你用VC+MFC,我可以推荐给你一套打印类库,太方便了,平推的打折子的工作我只用了半天就完成了。爽!爽!爽!拿来和兄弟分享。 在www.codetools.com中找print,有一套Print Lib,好用。有例子程序,我把要打印的内容通过一个结构传给CPage对象,检测是否有在线的打印机,格式输出,打印预览等简直是小菜一碟。

解决方案 »

  1.   

    呵呵,太好了,我正愁找不到资料呢!谢谢Tasehouny(阿甘)!!: ) 
      

  2.   

    dave是你在说话啊,打印方面的我可不知道,不过我主页上双增加了不少SDK源代码,你看看或许对你有用。http://vcroad.6to23.com
      

  3.   

    以前为一企业所写,X掉关键字,直接粘来:  
    void PrintF2(HWND hwnd,char cLeoOrKev)
    {
        PRINTDLG pd = {0};
     
        pd.lStructSize = sizeof(pd);
        pd.hwndOwner   = hwnd;
        pd.hDevMode    = hDevMode;
        pd.hDevNames   = hDevNames;
        pd.Flags       = PD_DISABLEPRINTTOFILE|PD_NOPAGENUMS|PD_SHOWHELP
                     |PD_RETURNDC|PD_NOSELECTION;
        pd.nFromPage   = 0xFFFF;
        pd.nToPage     = 0xFFFF;
        pd.nMinPage    = 0;
        pd.nMaxPage    = 0xFFFF;
        pd.nCopies     = 1;    if (PrintDlg(&pd))
        {
            hDevMode=pd.hDevMode;     
    hDevNames=pd.hDevNames;    
        
    GoPrintF2(hwnd,
                  pd.hDC,
                  pd.nCopies,cLeoOrKev);
           
        }    
    }
    void GoPrintF2(HWND    hwnd,   // 所属窗口的句柄 
               HDC     hdc,   // 打印机设备描述表
       UINT    nCopies,   // 复制份数
               char    cLeoOrKev  //xxxxxxxxxx
       )
    {
    HFONT hFont,hOldFont;
    LOGFONT  LogFont = {-12, 0, 0, 0, FW_NORMAL, 
    FALSE, FALSE, FALSE,
    DEFAULT_CHARSET,
    OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,
    DEFAULT_QUALITY,
    DEFAULT_PITCH | FF_DONTCARE,
    "宋体" 
    };
    DOCINFO di;
    unsigned int i;
    int LogPixelSy;
    unsigned short int ibas;
    // 填写DOCINFO结构。
        ZeroMemory(&di, sizeof (DOCINFO));
        di.cbSize = sizeof (DOCINFO);
    di.lpszDocName = "xxxxx副页打印";// 文档名称
        di.lpszOutput = NULL; // 输出文件的名称
        
    LogPixelSy = GetDeviceCaps(hdc, LOGPIXELSY);
    ibas=LogPixelSy/100;
    LogFont.lfHeight = -MulDiv(14, LogPixelSy, 72);
    hFont=CreateFontIndirect(&LogFont);
        
    if(hFont==NULL)return;

        if (StartDoc(hdc, &di) < 0)
        {        DWORD dwErr = GetLastError();
            char szErr[128];
            wsprintf(szErr, "%ld打印机作业错误%ld", (DWORD)hdc, dwErr);
            MessageBox(hwnd,  szErr,  "错误",  MB_OK | MB_ICONHAND);
            DeleteDC(hdc);
            return;
        }    // 废止主窗口,以避免产生重入问题。
        EnableWindow(hwnd, FALSE); for(i=0;i<nCopies;i++)
    {
            StartPage(hdc);
            hOldFont=SelectObject(hdc,hFont);
            SetTextCharacterExtra(hdc, 1);

    TextOut(hdc,240*ibas,267*ibas,"分 析 依 据:",16);
    if(cLeoOrKev==1)
    {
    TextOut(hdc,273*ibas,270*ibas-LogFont.lfHeight,"SY/ T xxxx-1997",15);
    TextOut(hdc,273*ibas,270*ibas-LogFont.lfHeight*3,"《xxxxxxxxxxxx分析方法》",34);
    TextOut(hdc,240*ibas,270*ibas-LogFont.lfHeight*5,"主要分析设备:",14);
    TextOut(hdc,273*ibas,270*ibas-LogFont.lfHeight*7,"xxxxxxxxxxxx440",18);
    }
    if(cLeoOrKev==2)
    {
    TextOut(hdc,273*ibas,270*ibas-LogFont.lfHeight,"SY/ T 6189-1996",15);
    TextOut(hdc,273*ibas,270*ibas-LogFont.lfHeight*3,"《xxxxxxxxxxxxxx方法》",28);
    TextOut(hdc,240*ibas,270*ibas-LogFont.lfHeight*5,"主要分析设备:",14);
    TextOut(hdc,273*ibas,270*ibas-LogFont.lfHeight*7,"xxxxxxxxx仪",11);
    }

    TextOut(hdc,240*ibas,270*ibas-LogFont.lfHeight*10,"分析环境:",10);
    TextOut(hdc,273*ibas,270*ibas-LogFont.lfHeight*12,"室温:     ℃",18);
    TextOut(hdc,273*ibas,270*ibas-LogFont.lfHeight*14,"湿度:     %",18);
    TextOut(hdc,240*ibas,270*ibas-LogFont.lfHeight*17,"分 析 人:",12);
    TextOut(hdc,240*ibas,270*ibas-LogFont.lfHeight*19,"校 核 人:",12);
    TextOut(hdc,240*ibas,270*ibas-LogFont.lfHeight*21,"技术负责人:",12);

    SelectObject(hdc,hOldFont);
    EndPage(hdc);
    }
        
        EndDoc(hdc);    // 启用主窗口
        EnableWindow(hwnd, TRUE);
        DeleteObject(hFont);
        DeleteDC(hdc);
    MessageBeep( 0) ;}