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 |