龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC数据库编程中的打印控制(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
// 输出报表,建议用CDC::DrawText()函数便于控制打印范围 ... // 终止打印作业 m―DC.EndPage(); m―DC.EndDoc(); m―DC.SelectObject(pOldFont); // 清除打印场景 DoClearPrintD

   // 输出报表,建议用CDC::DrawText()函数便于控制打印范围

   ...

   // 终止打印作业

   m―DC.EndPage();

   m―DC.EndDoc();

   m―DC.SelectObject(pOldFont);

   // 清除打印场景

   DoClearPrintDC();}

  表格问题

  对格式固定或表头、表体比较复杂的情况,特别是有嵌套表格的情况下,我们认为先将打印结果以文本形式写入一临时文件,然后再对文件进行打印输出的方法会使事情简单一些。因为这样在程序中就可以只关心数据(表体)的输出,而表头则可以固定格式存入数据库。

  但是,我们在对文本形式的报表进行打印输出时却发现一个有趣的现象,有时输出结果的相邻两行表格竖线不能对齐,而有时又可以。原来是 Windows 图形输出的问题,只要我们在建立打印字体时,字体的高度是偶数就可保证竖线对齐,如果是奇数则不能对齐。知道了原因,在建立打印字体时只需加入如下代码即可:

  ...

  #define  FONTSIZE 14

  #define  HFONTNAME ″宋体″

  // 建立打印字体,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()进行绘制输出的原因。

精彩图集

赞助商链接