中基于的打印和打印計(jì)劃
2.頁眉和頁腳
打印文檔時(shí),往往需要打印文檔的標(biāo)題及頁碼或其他內(nèi)容的頁眉和頁腳。我們知道,在視圖類的函數(shù)OnPrint中處理頁眉和頁腳是最合適的,因?yàn)槊看蛴∫豁摚驼{(diào)用該函數(shù)一次,且只在打印過程中調(diào)用。有時(shí),為了避免與正文重合,還需要調(diào)整CPrintInfo中的成員變量m_rectDraw的值。例如下面的代碼:
void CEx_Prn1View::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
SetPageMargin(pDC, pInfo, 250, 250, 250, 250);
// 頁邊距均為25毫米
int nOldMode = pDC-GetMapMode();
pDC-SetMapMode(MM_LOMETRIC);
pDC-DPtoLP(pInfo-m_rectDraw);
// 先設(shè)置頁眉字體,然后打印頁眉
CFont font;
eateFontIndirect(m_lfHead);
CFont *oldFont = pDC-SelectObject(font);
// 計(jì)算頁眉繪制的區(qū)域
int nHeadMargin = 200; // 設(shè)置頁眉邊距為20mm
CRect rc(pInfo-m_rectDraw);
p = -nHeadMargin + m_nPhyTop;
ttom = pInfo-m_p;
// 設(shè)頁眉內(nèi)容為打印的文檔名
CEx_Prn1Doc* pDoc = GetDocument();
CString str = pDoc-GetPathName(); // 獲取文檔全名
pDC-DrawText(str, rc, DT_TOP|DT_CENTER);
// 先設(shè)置頁腳字體,然后打印頁腳
tach();
eateFontIndirect(m_lfFoot);
pDC-SelectObject(font);
// 計(jì)算頁腳繪制的區(qū)域
int nFootMargin = 200; // 設(shè)置頁腳邊距為20mm
p = pInfo-m_ttom;
ttom = p - (nFootMargin - m_nPhyBottom);
// 設(shè)頁腳內(nèi)容為打印的頁碼
rmat(\"- %d -\", pInfo-m_nCurPage);
pDC-DrawText(str, rc, DT_BOTTOM
DT_SINGLELINE | DT_RIGHT);
pDC-SelectObject(oldFont); // 恢復(fù)原來的字體
pDC-LPtoDP(pInfo-m_rectDraw);
——購銷臺(tái)賬制度。在購進(jìn)食品時(shí)建立相應(yīng)的食品購銷臺(tái)賬 pDC-SetMapMode(nOldMode); // 恢復(fù)原來映射模式
CEditView::OnPrint(pDC, pInfo);
}
這樣,在用戶視圖類的構(gòu)造函數(shù)中添加LOGFONT類型的成員變量m_lfHead和m_lfFont的下列初始化代碼:
CEx_Prn1View::CEx_Prn1View()
{
memset(m_lfHead, 0, sizeof(LOGFONT)); // 成員為0
double fontScale = 254.0/72.0;
// 一個(gè)點(diǎn)相當(dāng)于多少0.1mm
// 頁眉字體
m_Height = -(int)(9 * fontScale + 0.5); // 9號(hào)字
m_Weight = FW_NORMAL;
m_CharSet = GB2312_CHARSET;
strcpy((LPSTR)(m_FaceName),
\"楷體_GB2312\");
// 頁腳字體
m_lfFoot = m_lfHead;
}
到這里,編譯并運(yùn)行程序后,打開一個(gè)文檔,選擇\"文件\"|\"打印預(yù)覽\"菜單命令就可以看到效果了。但是文檔顯示的字體還需要進(jìn)行設(shè)置,這比較簡單。只需添加個(gè)菜單項(xiàng)(設(shè)為ID_VIEW_FONT),然后用ClassWizard在CEx_Prn1View類添加該命令的消息映射函數(shù),并添加下列代碼:
void CEx_Prn1View::OnViewFont()
{
CFontDialog dlg;
if (Modal() == IDOK) {
LOGFONT lf;
tCurrentFont(lf);
HFONT hFont;
hFont = ::CreateFontIndirect(lf);
if (hFont != NULL)
SendMessage(WM_SETFONT, (WPARAM)hFont);
}
}
3.重置TAB值
在CEditView中,默認(rèn)的Tab值等于8個(gè)字符。但實(shí)際情況的Tab值往往是4個(gè)字符,所以需要重設(shè)這個(gè)Tab值。
CEditView::SetTabStops就是這樣的函數(shù),但MSDN對其解釋令人費(fèi)解,什么\"設(shè)置的Tab值是以對話框點(diǎn)為單位的\"等等。實(shí)際上,只要打開MFC的源代碼文件p就可以看到默認(rèn)的Tab值為8*4,顯然,若設(shè)置為4個(gè)字符,則SetTabStops的參數(shù)值應(yīng)為4*4,即16。設(shè)置Tab值的代碼可直接添加在 CEx_Prn1View::OnInitialUpdate函數(shù)中:
void CEx_Prn1View::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
SetTabStops(4 * 4); // 設(shè)置一個(gè)停止位等于4個(gè)字符
}
再次運(yùn)行程序,最后的結(jié)果如下圖所示。
三、 結(jié)束語
通過在CEditView中添加設(shè)置頁邊距、頁眉頁腳以及改變字體和Tab值等功能,不能代碼量小,而且更主要的是滿足了一般ASCII文檔的內(nèi)容顯示和打印的要求。查看本文來源
黑龍江專業(yè)治療牛皮癬醫(yī)院長沙治療包皮過長多少錢
三精葡萄糖酸鋅
- 給領(lǐng)導(dǎo)發(fā)傳統(tǒng)節(jié)日祝福短信,情商高的人都知道這3點(diǎn),怪不得領(lǐng)導(dǎo)喜歡
- 柯潔,狀態(tài)爆表,100手取得勝利7連勝的李軒豪!
- 庫里:一切都在朝著正確的方向拓展 身體感覺很好&一切都很好
- 聚丙烯:需求與成本雙重壓制 從業(yè)人員開工低位徘徊
- 員工下班后才同意簽下勞動(dòng)合同,南寧一公司被判補(bǔ)償2.7萬余元!
- 國家電網(wǎng)公開招聘正式工,平均工資8600以上,本科生以上均可報(bào)考
- 你要像翻新荒地般,每一天去翻新自己
- 老爸老媽“最抵觸”的外賣,麻辣燙排第一,第3種你挨罵也要肉
- 職場:走出舒適區(qū),給歷程更多的可能
- 投資者提問:麻煩一定回復(fù):請問喜公司的鋯英砂主要采購自哪里,通過什么線路運(yùn)...
- 文丘里流量計(jì)
- 江西7旬大爺和時(shí)尚大媽邂逅,初次見面,大爺就往人家肩膀上靠