EndDoc();
m—DC.SelectObject(pOldFont);
// 清除打印场景
DoClearPrintDC();}
表格
问题 对格式固定或表头、表体比较复杂的情况,特别是有嵌套表格的情况下,我们认为先将打印结果以文本形式写入一临时文件,然后再对文件进行打印输出的方法会使事情简单一些。因为这样在程序中就可以只关心数据(表体)的输出,而表头则可以固定格式存入数据库。
但是,我们在对文本形式的报表进行打印输出时却发现一个有趣的现象,有时输出结果的相邻两行表格竖线不能对齐,而有时又可以。原来是 Windows 图形输出的问题,只要我们在建立打印字体时,字体的高度是偶数就可保证竖线对齐,如果是奇数则不能对齐。知道了原因,在建立打印字体时只需加入如下代码即可:
...
#defineFONTSIZE 14
#defineHFONTNAME ″宋体″
// 建立打印字体,m—fontPrint是定义为CFont m—fontPrint的类成员变量
int nFontHeight=MulDiv(FONTSIZE,-cyInch, 72);
if(nFontHeight % 2) nFontHeight++;
if(!m—fontPrint.CreateFont(nFontHeight, 0, 0, 0, FW—NORMAL, 0, 0,0,GB2312—CHARSET, OUT—CHARACTER—PRECIS, CLIP—CHARACTER—PRECIS,DEFAULT—QUALITY, DEFAULT—PITCH | FF—DONTCARE, HFONTNAME))
return FALSE;
...
还有一点小技巧,输出文本形式的报表时,对报表的横线只需要输出
其正常高度的二分之一或三分之一,这样报表看起来更紧凑美观。这也是我们在前面建议用CDC::DrawText()进行绘制输出的原因。