印刷処理
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
}