三度网教程:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

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

时间:2023-7-31作者:未知来源:三度网教程人气:


VC数据库编程中的打印控制比较复杂,但它也给程序员最大的灵活性,而这种灵活性正是我们需要的。因为各行业、部门的报表一般都不太规整,特别是表头部分,二、三重嵌套的情况很常见。下面我们就开发中碰到的一些问题与同行们探讨。

  Document/View框架之外的打印

  熟悉VC的程序员都知道Microsoft 的AppWizard生成的应用程序框架中,可以选择免费的打印及打印预览功能,但前提是必须选择Document/View结构。然而我们的数据库应用中一般都不需要一个文档类来保存文档,因为数据库(源)就是我们的文档,数据一般是在一个对话框或视中与用户交互,编辑或修改结果直接通过数据库引擎写回数据库中。我们的程序主框架要么是基于对话框的、要么是基于无文档类的单视(或多视)结构,在这种情况下,AppWizard 在打印控制部分并不能给我们任何帮助,只能自己负责完成打印控制。

  总结起来,一次打印操作要遵循以下步骤:

  1.得到或生成打印设备场景,可通过显示打印对话框让用户选择打印机与纸张等设置,也可在程序中直接取系统缺省打印机设置,然后根据报表格式设置纸张大小和打印方向;

  2.开始在该设备场景中的一次打印作业,实际打印报表内容,终止打印作业;

  3.清除打印设备场景,完成本次打印操作。

  在下面的例子中,我们在一个对话框中让用户选择打印某个报表,没有显示打印设置对话框,而是直接取系统缺省打印机设置,然后根据报表格式设置纸张大小和打印方向。之所以这样做是因为各行业、部门的报表格式一般都是至上而下的统一格式。函数DoPreparePrintDC()、DoPrint()和DoClearPrintDC()分别对应上述的三个步骤:

  BOOL CMyDialog::DoPreparePrintDC()

  // 准备打印场景

  {

   #define  FONTSIZE 14

   // 获取打印机的设备属性

   CPrintDialog dlgPrint( FALSE );

   // 得到当前系统缺省打印机设置

   if(!dlgPrint.GetDefaults()) return FALSE;

   LPDEVMODE pDM=dlgPrint.GetDevMode();

   if(pDM==NULL) return FALSE;

   ::GlobalUnlock(pDM);

   // 联结打印DC,m—hDC是定义为HDC m—hDC的类成员变量

   m—hDC=dlgPrint.CreatePrinterDC();

   // m—DC是定义为CDC m—DC的类成员变量

   if(!m—DC.Attach(m—hDC) return FALSE;

   // 设置打印标志

   m—DC.m—bPrinting=TRUE;

   short cxInch=m—DC.GetDeviceCaps(LOGPIXELSX);

   short cyInch=m—DC.GetDeviceCaps(LOGPIXELSY);

   // 建立打印字体,m—fontPrint 是定义为CFont m_fontPrint的类成员变量

   if(!m—fontPrint.CreateFont(MulDiv(FONTSIZE, -cyInch, 72),0,0,0, FW—NORMAL,0,0,0, GB2312—CHARSET, OUT—CHARACTER—PRECIS, CLIP—CHARACTER—PRECIS,DEFAULT—QUALITY, DEFAULT—PITCH

关键词:  VC数据库编程中的打印控制





Copyright © 2012-2018 三度网教程(http://www.3du8.cn) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版