您的位置: 旅游网 > 影视 >> 剧照

中基于的打印和打印计划

发布时间:2021-10-28 05:38:13

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文档的内容显示和打印的要求。查看本文来源

黑龙江专业治疗牛皮癣医院
长沙治疗包皮过长多少钱
三精葡萄糖酸锌
猜你会喜欢的
猜你会喜欢的