不用DOC/VIEW類結構進行列印 (轉)

worldblog發表於2007-12-04
不用DOC/VIEW類結構進行列印 (轉)[@more@]

直接列印,不需要文件/視

聞怡洋 譯 to:wyy_cq@188">wyy_cq@188.net

This article was contributed by .

如果你需要在沒有使用文件/檢視的應用中使用列印功能(比如說在對話方塊中)你將無法利用MFC提供的功能,而且對於某些新手來講有些困難。 下面的的程式碼可以供你在對話方塊中如果在DOC/View中一樣使用列印功能。你必須定義OnBeginPrinting, OnEndPrinting 和 OnPrint三個,其原型和功能與在VIEW中一樣。


void CMyDialog::Print()
{
CDC dc;
CPrintDialog printDlg(FALSE);
//利用CPrintDialog 生成印表機裝置環境
if (printDlg.odal() == IDCANCEL) // Get printer settings from user 讓選擇列印紙張等
return;

dc.Attach(printDlg.GetPrinterDC());
// Attach a printer DC 讓HANDLE連線到dc上
dc.m_bPrinting = TRUE;

CString strTitle; // Get the application title ?
strTitle.LoadString(AFX_IDS_APP_TITLE);

DOCINFO di; // Initialise print document details DOCINFO中有相關的列印資訊
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
di.lpszDocName = strTitle;//設定標題

BOOL bPrintingOK = dc.StartDoc(&di); // Begin a new print job 開始列印

// Get the printing extents and store in the m_rectDraw field of a
// CPrintInfo
CPrintInfo Info;//
Info.m_rectDraw.SetRect(0,0,
dc.GetDeviceCaps(HORZRES),
dc.GetDeviceCaps(VERTRES));//設定範圍

OnBeginPrinting(&dc, &Info); // 你自己定義的初始化功能
for (UINT page = Info.GetMinPage(); page
{Info.m_nCurPage = page;
OnPrint(&dc, &Info);
// Call your "Print page" function
bPrintingOK = (dc.EndPage() > 0);
// end page
}
OnEndPrinting(&dc, &Info);
// 結束列印

if (bPrintingOK)
dc.EndDoc();
// end a print job
else
dc.AbortDoc();
// abort job.

dc.Detach();
// detach the printer DC
}

[譯者:其實在環境中是裝置無關的。只要有了DC,你可以使用各種GDI函式,而不需要理會是在螢幕或是在印表機上繪圖。在Windows3.X一般使用CreateDC建立列印環境,在下好象並不是很相容,使用CPrintDialog產生列印DC是個不錯的方法。你只要看看MFC的就能搞清楚PrintDialog是怎麼產生DC的了。 藍色的程式碼是講訴如何初始化列印的引數,而其他的引數你可以在OnBeginPrint中進行設定]


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988404/,如需轉載,請註明出處,否則將追究法律責任。

相關文章