印刷処理
Doc-ViewではViewクラスのOnDrawで画面、プリンタ両対応している。
非Doc-Viewでは以下のようにする
・アプリケーションクラス
メッセージマップにプリンタ設定のためのハンドラ作成
ID_FILE_PRINT_SETUP はメニュー プリンタの設定
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
・メインフレームやその他ウインドウ
メッセージマップに印刷のためのハンドラ作成
ON_COMMAND(ID_FILE_PRINT, OnFilePrint) void CChildView::OnFilePrint() { CPrintInfo printInfo; ASSERT(printInfo.m_pPD != NULL); // must be set CWinApp* pApp = AfxGetApp(); if (pApp->DoPrintDialog(printInfo.m_pPD) != IDOK) return; // do not print CDC dcPrint; dcPrint.Attach(printInfo.m_pPD->m_pd.hDC); // attach printer dc dcPrint.m_bPrinting = TRUE; // Get the application title CString strTitle; strTitle.LoadString(AFX_IDS_APP_TITLE); // Initialise print document details DOCINFO di; ::ZeroMemory (&di, sizeof(DOCINFO)); di.cbSize = sizeof(DOCINFO); di.lpszDocName = (LPCSTR)strTitle; BOOL bPrinting = dcPrint.StartDoc(&di); BOOL bPage = TRUE; while (bPrinting && bPage) { dcPrint.StartPage(); // この位置で1ページ分の出力するためのコードを書く // すべてのページを出力したら bPage = FALSE で終了 dcPrint.TextOut(0, 0, "TEST"); bPage = FALSE; bPrinting = (BOOL)dcPrint.EndPage(); } if (bPrinting) dcPrint.EndDoc(); else dcPrint.AbortDoc(); dcPrint.Detach(); // will be cleaned up by CPrintInfo destructor }