VC實現列印預覽功能1

2021-08-24 18:50:43 字數 2346 閱讀 7694

在mfc中cview類已經封裝好了列印相關的功能,我們只需要新增一些虛函式並加以處理即可。

需要新增的虛函式有:

public:

virtual void onpreparedc(cdc* pdc, cprintinfo* pinfo = null);

protected:

virtual bool onprepareprinting(cprintinfo* pinfo);

virtual void onbeginprinting(cdc* pdc, cprintinfo* pinfo);

virtual void onendprinting(cdc* pdc, cprintinfo* pinfo);

virtual void onprint(cdc* pdc, cprintinfo* pinfo);

virtual void onendprintpreview(cdc* pdc, cprintinfo* pinfo, point point, cpreviewview* pview);

其中:onpreparedc是公有型別的,此函式在輸出到螢幕時會被呼叫,在列印和列印預覽時也會被呼叫。

在輸出到螢幕時是被cview::onpaint()呼叫的,其函式原型為:

void cview::onpaint()

而在列印預覽時是被:cpreviewview::ondraw(cdc* pdc)呼叫的(其函式原型較長,故此忽略).很明顯他是為準備裝置上下文環境而被呼叫的。

當然如果在cview的派生類中新增了wm_paint事件則輸出到螢幕時onpreparedc不會被呼叫。

在列印預覽中以上函式呼叫的順序為:

onprepareprinting-->onbeginprinting-->onpreparedc-->onprint-->onendprintpreview-->onendprinting.

如果在列印預覽中視窗有變動則onpreparedc-->onprint重複呼叫.

根據如上過程,我們可以在onprepareprinting函式中準備列印資訊cprintinfo* pinfo;

在onprint中新增列印資訊,當然要去掉onprint函式中cview::onprint(pdc, pinfo);的呼叫。cview::onprint(pdc, pinfo);它會呼叫cview類中的ondraw函式,其函式原型是:

void cview::onprint(cdc* pdc, cprintinfo*)

如果列印多頁的話可以根據cprintinfo* pinfo的資訊在onprint函式中進行不同的輸出,如:

if(pinfo->m_ncurpage==1)

else if(pinfo->m_ncurpage==2)

由於印表機的解析度通常要比螢幕的解析度大得多。假如同樣的一條輸出語句,在螢幕上輸出為1厘公尺,在印表機上可能就是很短的距離。因此,在輸出列印資訊時,需要設定一定的輸出比例。可以利用cdc的getdevicecaps方法間接獲取印表機與螢幕的解析度。該方法如下:

int getdevicecaps(int nindex)const;

引數說明:

nindex:標識方法返回資訊的型別。logpixelsx是當前cdc物件,表示裝置水平方向每英吋的畫素數量.logpixelsy是當前cdc物件,表示裝置垂直方向每英吋的畫素數量.

當視窗的cdc物件呼叫getdevicecaps(logpixelsx)方法時,返回的是螢幕水平方向每英吋的畫素數量.當印表機的cdc物件呼叫getdevicecaps(logpixelsx)方法時,返回的是印表機水平方向每英吋的畫素數量.將這兩種方法返回的資料相除就可以獲得印表機與螢幕的解析度比率了。

通常可以在cview類的ondraw方法中獲取螢幕每英吋的畫素量,**如下:

screenx=pdc->getdevicecaps(logpixelsx);

screeny=pdc->getdevicecaps(logpixelsy);

在cview類的onbeginprinting方法中獲得印表機每英吋的畫素數量,**如下:

printx=pdc->getdevicecaps(logpixelsx);

printy=pdc->getdevicecaps(logpixelsy);

xrate=(double)printx/screenx;

yrate=(double)printy/screeny;

在ondraw函式的輸出語句與onprint中的輸出語句稍微有點變化,如在ondraw中輸出語句為:

pdc->textout(100,100,"wjh");

在onprint中要改為:

pdc->textout((int)100*xrate,(int)100*yrate,"wjh");

當然字型也要放大。

VC實現列印功能

http yesky.com 13 1700013.shtml列印api http bloghome.cn topics vc 4 22.htm列印api 設定紙張大小 if printdlg pd return false assert pd.hdc null 設定紙張大小daiguopeng,d...

JavaScript 實現列印,列印預覽,列印設定

一 webbrowser控制項 二 webbrowder控制項的方法 列印 webbrowser1.execwb 6,1 列印設定 webbrowser1.execwb 8,1 列印預覽 webbrowser1.execwb 7,1 關於這個元件還有其他的用法,列舉如下 webbrowser.exe...

列印功能 列印預覽,列印部分頁面

window.print 預設列印整個頁面,可是我只想列印頁面的部分樣式,最簡單的一種方法是使用 css 的 查詢有針對列印的樣式,用 media print設定列印時除了要列印的內容,其它全部隱藏即可 設定列印樣式 瀏覽器預設情況下並不能列印出css中的背景內容 列印設定使用的是物理單位,所以尺寸...