FF—DONTCARE, HFONTNAME)
return FALSE;
return TRUE;}
void CDlgDataPrint::DoClearPrintDC()
// 清除打印场景
{ m—fontPrint.DeleteObject();
m—DC.Detach();
::DeleteDC( m—hDC );}
void CDlgDataPrint::DoPrint()
// 实际打印输出
{ if(DoPreparePrintDC()==FALSE) return;
// 开始一次打印作业
CString str;
str.LoadString(AFX—IDS—APP—TITLE);
DOCINFO di;
::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize=sizeof (DOCINFO);
di.lpszDocName=str;
m—DC.StartDoc(&di);
m—DC.StartPage();
// 将打印字体选进设备场景
CFont* pOldFont=m—DC.SelectObject(&m—fontPrint);
// 输出报表,建议用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 (北联网教程,专业提供视频软件下载)
……