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

VC覚書きページ...