블로그 이미지
frostguy

카테고리

분류 전체보기 (48)
사진 (3)
Study (40)
IT (3)
Total141,177
Today0
Yesterday25

'출력'에 해당되는 글 2건

  1. 2009.06.19 GDI+ 를 통해 이미지 파일을 출력하기
  2. 2009.06.12 여러 페이지 인쇄하기
// stdafx.h 에 추가
#include 
#pragma comment(lib, "gdiplus")
using namespace Gdiplus;

// 전역 변수 선언
ULONG_PTR gdiplusToken;

//InitInstance 에 추가
GdiplusStartupInput gdiplusStartupInput;
if(::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL) != Ok){
	AfxMessageBox(_T("Error : Failed to initialize GDI+ library"));
	return FALSE;
}
//ExitInstance 에 추가
::GdiplusShutdown(gdiplusToken);

//OnPaint 에 추가
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeHighQuality);
Image image(_T("capture.jpg"));
graphics.DrawImage(& image, 0, 0, image.GetWidth() / 2, image.GetHeight() / 2);
Posted by frostguy
// 인쇄 다이얼로그 박스 출력
CPrintDialog printDlg(FALSE);
if (printDlg.DoModal() == IDCANCEL) return;

// 프린터 DC를 얻음
CDC dc;
dc.Attach(printDlg.GetPrinterDC());
dc.m_bPrinting = TRUE;

// 인쇄될 도큐먼트에 관한 정보 설정
CString strTitle;                           
strTitle.LoadString(AFX_IDS_APP_TITLE);
DOCINFO di;                       
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
di.lpszDocName = strTitle;
    
// 도큐먼트 인쇄 시작
BOOL bPrintingOK = dc.StartDoc(&di); 

// CPrintInfo에 인쇄 관련 정보 설정
CPrintInfo Info;
//width = 4725, height 6792
Info.m_rectDraw.SetRect(500,500, dc.GetDeviceCaps(HORZRES)-500, dc.GetDeviceCaps(VERTRES)-500);
    
CRect           r;
int             nHeight;    

dc.SetMapMode(MM_TEXT);    
출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=227478&ref=227094
 // m_strEDIT는 프린트할 String 데이터가 들어있는 CString 변수 입니다.
char * p = m_strEDIT.GetBuffer(m_strEDIT.GetLength());
char *startAt = p;

//이 부분이 여러페이지 인쇄를 위해서 쓰이는 부분 같습니다.
 int totalDone = 0;    
 int lengthToGo = m_strEDIT.GetLength();

// 페이지를 인쇄하는 루프
for (UINT page = Info.GetMinPage(); bPrintingOK && totalDone < lengthToGo ; page++)
{
    // 페이지 인쇄 시작
   dc.StartPage(); 
    Info.m_nCurPage = page;
                
    r = Info.m_rectDraw;
    r.bottom = r.top;
    int i = 0;
    while (r.bottom < Info.m_rectDraw.bottom && totalDone + i < lengthToGo)
    {
            r.right = Info.m_rectDraw.right;            
            nHeight = dc.DrawText(startAt, i++, r, DT_CALCRECT|DT_WORDBREAK|DT_NOCLIP|DT_EXPANDTABS);
    }
    // go one back to assure correct height
    if (r.bottom >= Info.m_rectDraw.bottom)
    i--;
    //print page number
    CString strPageNum;
    strPageNum.Format("- %d -",Info.m_nCurPage);
    dc.DrawText(strPageNum,i, r, DT_CENTER|DT_SINGLELINE|DT_VCENTER);

    // print that text
    dc.DrawText(startAt, i, r, DT_WORDBREAK|DT_NOCLIP|DT_EXPANDTABS);
        
    // go to next page
    startAt += i;
    totalDone += i;        

   // 페이지 인쇄 완료
  bPrintingOK = (dc.EndPage() > 0); 
}
m_strEDIT.ReleaseBuffer();

// 도큐먼트 인쇄 종료
if (bPrintingOK) dc.EndDoc(); 
else dc.AbortDoc(); 

dc.Detach();
출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=227478&ref=227094
Posted by frostguy

최근에 달린 댓글

글 보관함