调用系统API打印图片文字

{
    LPCTSTR filename=_T( " D:\\1.bmp ");
    CPrintDialog printDlg(FALSE);
    printDlg.GetDefaults(); 
     //  Or get from user:
    
//  if (printDlg.DoModal() == IDCANCEL)   
    
//         return; 
    CDC dc;
     if (!dc.Attach(printDlg.GetPrinterDC())) {
        AfxMessageBox(_T( " No printer founhh nn nd! "));  return;
    }

    HFONT hFont,hOldFont;
    hFont = CreateFont( 36, 18,   0,   0,FW_NORMAL,FALSE,FALSE,  FALSE,GB2312_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_MODERN,_T( " 黑体 "));
    hOldFont = (HFONT)SelectObject(dc,hFont);

    dc.m_bPrinting = TRUE; 
    DOCINFO di;    
     //  Initialise print document details
    ::ZeroMemory (&di,  sizeof (DOCINFO));
    di.cbSize =  sizeof (DOCINFO);
    di.lpszDocName = filename; 
    BOOL bPrintingOK = dc.StartDoc(&di);  //  Begin a new print job 
    
//  Get the printing extents
    
//  and store in the m_rectDraw field of a 
    
//  CPrintInfo object
    CPrintInfo Info;
    Info.SetMaxPage( 1);  //  just one page 
     int maxw = dc.GetDeviceCaps(HORZRES);
     int maxh = dc.GetDeviceCaps(VERTRES); 
    Info.m_rectDraw.SetRect( 00, maxw, maxh); 
     for (UINT page = Info.GetMinPage(); page <= 
        Info.GetMaxPage() && bPrintingOK; page++) {
            dc.StartPage();     //  begin new page
            Info.m_nCurPage = page;
            CBitmap bitmap;
             if(!bitmap.Attach(::LoadImage(
                ::GetModuleHandle(NULL), filename, IMAGE_BITMAP,  00
                LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE))) {
                    AfxMessageBox(_T( " Error loading bitmap! "));  return;
            } 
            BITMAP bm;
            bitmap.GetBitmap(&bm);
             int w = bm.bmWidth; 
             int h = bm.bmHeight; 
             //  create memory device context
            CDC memDC; 
            memDC.CreateCompatibleDC(&dc);
            CBitmap *pBmp = memDC.SelectObject(&bitmap);
            memDC.SetMapMode(dc.GetMapMode());
            dc.SetStretchBltMode(HALFTONE);
             //  now stretchblt to maximum width on page
            dc.StretchBlt( 15, 20300110, &memDC,  00, w, h, SRCCOPY); 
             // textout
            HPEN hPen = CreatePen(PS_SOLID,  3, RGB( 0, 0, 0));
            HGDIOBJ hOldPen = SelectObject(dc,hPen);
            CStringW text;
            text    = " 资源编码 ";
            TextOut(dc, 15, 144+ 80,text,text.GetLength());   
            text= " 设计单位 ";
            TextOut(dc, 15, 210+ 80,text,text.GetLength());   
            text= " 施工单位 ";
            TextOut(dc, 15, 276+ 80,text,text.GetLength());   
            text= " 验收单位 ";
            TextOut(dc, 15, 342+ 80,text,text.GetLength());   
            text= " 竣工日期 ";
            TextOut(dc, 15, 408+ 80,text,text.GetLength());   
             // Line
            MoveToEx(dc, 160, 180+ 80,NULL);
            LineTo(dc, 516, 180+ 80);

            MoveToEx(dc, 160, 246+ 80,NULL);
            LineTo(dc, 516, 246+ 80);

            MoveToEx(dc, 160, 312+ 80,NULL);
            LineTo(dc, 516, 312+ 80);

            MoveToEx(dc, 160, 378+ 80,NULL);
            LineTo(dc, 516, 378+ 80);

            MoveToEx(dc, 160, 444+ 80,NULL);
            LineTo(dc, 516, 444+ 80);

            SelectObject(dc,hOldPen);
            DeleteObject(hPen);
             //  clean up
            memDC.SelectObject(pBmp);
            bPrintingOK = (dc.EndPage() >  0);    //  end page
    } 
     if (bPrintingOK)
        dc.EndDoc();  //  end a print job
     else dc.AbortDoc();            //  abort job. 
}

你可能感兴趣的:(api)