void CMyDialog::OnPrintBuf()
       {
       char   pbuf[100] = "Hello World.";
       HDC    hdcPrn ;       // Instantiate a CPrintDialog.
       CPrintDialog *printDlg =
           new CPrintDialog(FALSE, PD_ALLPAGES | PD_RETURNDC, NULL);       // Initialize some of the fields in PRINTDLG structure.
       printDlg->m_pd.nMinPage = printDlg->m_pd.nMaxPage = 1;
       printDlg->m_pd.nFromPage = printDlg->m_pd.nToPage = 1;       // Display Windows print dialog box.
       printDlg->DoModal();       // Obtain a handle to the device context.
       hdcPrn = printDlg->GetPrinterDC();
       if (hdcPrn != NULL)
           {
           CDC *pDC = new CDC;
           pDC->Attach (hdcPrn);      // attach a printer DC           pDC->StartDoc("test");  // begin a new print job
                                   // for Win32 use
                                   // CDC::StartDoc(LPDOCINFO) override           pDC->StartPage();          // begin a new page
           SetPrintAlign(pDC, hdcPrn);// set the printing alignment
           pDC->TextOut(10, 10, pbuf);// write the string in pbuf
           pDC->EndPage();            // end a page           pDC->EndDoc();             // end a print job           pDC->Detach();             // detach the printer DC
           delete pDC;
           }       delete printDlg;
       }   void CMyDialog::SetPrintAlign(CDC *pDC, HDC hdcPrn)
       {
       short cxPage, cyPage;       cxPage = ::GetDeviceCaps (hdcPrn, HORZRES) ;
       cyPage = ::GetDeviceCaps (hdcPrn, VERTRES) ;
       pDC->SetMapMode (MM_ISOTROPIC) ;
       pDC->SetWindowExt ( 1000, 1000) ;
       pDC->SetViewportExt (cxPage / 2, -cyPage / 2) ;
       pDC->SetViewportOrg (cxPage / 2,  cyPage / 2) ;
       pDC->SetTextAlign (TA_BASELINE | TA_CENTER) ;
       }