中基于的打印和打印计划
2.页眉和页脚
打印文档时,往往需要打印文档的标题及页码或其他内容的页眉和页脚。我们知道,在视图类的函数OnPrint中处理页眉和页脚是最合适的,因为每打印一页,就调用该函数一次,且只在打印过程中调用。有时,为了避免与正文重合,还需要调整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);
// 先设置页眉字体,然后打印页眉
CFont font;
eateFontIndirect(m_lfHead);
CFont *oldFont = pDC-SelectObject(font);
// 计算页眉绘制的区域
int nHeadMargin = 200; // 设置页眉边距为20mm
CRect rc(pInfo-m_rectDraw);
p = -nHeadMargin + m_nPhyTop;
ttom = pInfo-m_p;
// 设页眉内容为打印的文档名
CEx_Prn1Doc* pDoc = GetDocument();
CString str = pDoc-GetPathName(); // 获取文档全名
pDC-DrawText(str, rc, DT_TOP|DT_CENTER);
// 先设置页脚字体,然后打印页脚
tach();
eateFontIndirect(m_lfFoot);
pDC-SelectObject(font);
// 计算页脚绘制的区域
int nFootMargin = 200; // 设置页脚边距为20mm
p = pInfo-m_ttom;
ttom = p - (nFootMargin - m_nPhyBottom);
// 设页脚内容为打印的页码
rmat(\"- %d -\", pInfo-m_nCurPage);
pDC-DrawText(str, rc, DT_BOTTOM
DT_SINGLELINE | DT_RIGHT);
pDC-SelectObject(oldFont); // 恢复原来的字体
pDC-LPtoDP(pInfo-m_rectDraw);
——购销台账制度。在购进食品时建立相应的食品购销台账 pDC-SetMapMode(nOldMode); // 恢复原来映射模式
CEditView::OnPrint(pDC, pInfo);
}
这样,在用户视图类的构造函数中添加LOGFONT类型的成员变量m_lfHead和m_lfFont的下列初始化代码:
CEx_Prn1View::CEx_Prn1View()
{
memset(m_lfHead, 0, sizeof(LOGFONT)); // 成员为0
double fontScale = 254.0/72.0;
// 一个点相当于多少0.1mm
// 页眉字体
m_Height = -(int)(9 * fontScale + 0.5); // 9号字
m_Weight = FW_NORMAL;
m_CharSet = GB2312_CHARSET;
strcpy((LPSTR)(m_FaceName),
\"楷体_GB2312\");
// 页脚字体
m_lfFoot = m_lfHead;
}
到这里,编译并运行程序后,打开一个文档,选择\"文件\"|\"打印预览\"菜单命令就可以看到效果了。但是文档显示的字体还需要进行设置,这比较简单。只需添加个菜单项(设为ID_VIEW_FONT),然后用ClassWizard在CEx_Prn1View类添加该命令的消息映射函数,并添加下列代码:
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中,默认的Tab值等于8个字符。但实际情况的Tab值往往是4个字符,所以需要重设这个Tab值。
CEditView::SetTabStops就是这样的函数,但MSDN对其解释令人费解,什么\"设置的Tab值是以对话框点为单位的\"等等。实际上,只要打开MFC的源代码文件p就可以看到默认的Tab值为8*4,显然,若设置为4个字符,则SetTabStops的参数值应为4*4,即16。设置Tab值的代码可直接添加在 CEx_Prn1View::OnInitialUpdate函数中:
void CEx_Prn1View::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
SetTabStops(4 * 4); // 设置一个停止位等于4个字符
}
再次运行程序,最后的结果如下图所示。
三、 结束语
通过在CEditView中添加设置页边距、页眉页脚以及改变字体和Tab值等功能,不能代码量小,而且更主要的是满足了一般ASCII文档的内容显示和打印的要求。查看本文来源
黑龙江专业治疗牛皮癣医院长沙治疗包皮过长多少钱
三精葡萄糖酸锌
- 给领导发传统节日祝福短信,情商高的人都知道这3点,怪不得领导喜欢
- 柯洁,状态爆表,100手取得胜利7连胜的李轩豪!
- 库里:一切都在朝着正确的方向拓展 身体感觉很好&一切都很好
- 聚丙烯:需求与成本双重压制 从业人员开工低位徘徊
- 员工下班后才同意签下劳动合同,南宁一公司被判补偿2.7万余元!
- 国家电网公开招聘正式工,平均工资8600以上,本科生以上均可报考
- 你要像翻新荒地般,每一天去翻新自己
- 老爸老妈“最抵触”的外卖,麻辣烫排第一,第3种你挨骂也要肉
- 职场:走出舒适区,给历程更多的可能
- 投资者提问:麻烦一定回复:请问喜公司的锆英砂主要采购自哪里,通过什么线路运...
- 文丘里流量计
- 江西7旬大爷和时尚大妈邂逅,初次见面,大爷就往人家肩膀上靠