2012. 1. 1. 22:01

void OnPrint()
{
 // 인쇄 다이얼로그 박스 출력
 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;
 Info.m_rectDraw.SetRect(0,0, dc.GetDeviceCaps(HORZRES), dc.GetDeviceCaps(VERTRES));
 
 // OnBeginPrinting 함수 호출
 OnBeginPrinting(&dc, &Info);

 // 페이지를 인쇄하는 루프
// int aaa = Info.GetMaxPage();
 for (UINT page = Info.GetMinPage(); page <= printPage && bPrintingOK; page++)
 {
  // 페이지 인쇄 시작
  dc.StartPage();
  Info.m_nCurPage = page;
 
  // OnPrint 함수 호출
  OnPrint(&dc, &Info, Info.m_nCurPage);

  // 페이지 인쇄 완료
  bPrintingOK = (dc.EndPage() > 0);
 }
 
 // OnEndPrinting 함수 호출
 OnEndPrinting(&dc, &Info);

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

 dc.Detach();
}
 
void OnPrint(CDC *pDC, CPrintInfo *pInfo, UINT pPage)
{
 adoOnQuery();
 CHeaderCtrl* pHeaderCtrl = mListCtrl.GetHeaderCtrl();
 
 TCHAR cbuf[100];
 LVCOLUMN lvcolumn;
 lvcolumn.mask = LVCF_TEXT;
 lvcolumn.pszText = cbuf;
 lvcolumn.cchTextMax = 100;
 
/*
 for (int k = 0; k < nColumnCount; k++)
 {   
  mListCtrl.GetColumn(k,&lvcolumn);
  m_strData += lvcolumn.pszText;
  m_strData += _T(" | ");
 }
 m_strData += _T("\r\n");
 
//컬럼 목차는 제외
*/
 int nColumnCount = pHeaderCtrl->GetItemCount();
 int nSelected = 1;
 int nIndex = -1;
 
 mListCtrl.SetItemState(nIndex, LVIS_FOCUSED | LVIS_SELECTED,
 
                                                 LVIS_FOCUSED | LVIS_SELECTED);
 POSITION pos = mListCtrl.GetFirstSelectedItemPosition();
 nIndex =  mListCtrl.GetNextSelectedItem(pos);
 nSelected = mListCtrl.GetItemCount();
 
//리스트 전체 개수
 
 printPage = nSelected / 65; //한페이지에 프린트 할 개수
 nSelected % 65 > 0 ? printPage++ : printPage;
 
 nIndex += (pPage-1) * 65;
 m_strData = _T("");
 
 int pRange = (int)printPage == pPage ? nSelected % 65 : 65;
 
 for(int i = 0; i < pRange; i++ )
 {
  nIndex++;
 
  for (int j = 0; j < nColumnCount; j++)
  {
   if(j == 0)
    m_strData += mListCtrl.GetItemText(nIndex, j).Left(10)+_T(" | ");
   else
    m_strData += mListCtrl.GetItemText(nIndex, j)+_T(" | ");
   if (j == nColumnCount - 1)
    m_strData += _T("\r\n");
  }
 }
 
 CRect rectBound(500, -500, 12000, -16500);
 
//프린트 페이지 크기(좌, 상, 우, 하)
 UpdateData();
 pDC->SetMapMode(MM_TWIPS);
 pDC->DrawText(m_strData, rectBound, DT_LEFT|DT_TOP);
}
 
void OnEndPrinting(CDC *pDC, CPrintInfo *pInfo)
{
}

'Windows Prog' 카테고리의 다른 글

프린트(이전 적용 내용)  (0) 2012.01.04
툴바 없애기  (0) 2012.01.01
뷰 크기 지정  (0) 2011.12.31
[MFC] 두개의 테이블을 데이터 베이스에 연결하기  (0) 2011.12.28
으아 =_=  (0) 2011.12.28
Posted by Triany