打印与打印预览 :: Bordern 随笔

来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=179589 存档链接: https://web.archive.org/web/20041109175735id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=179589


Bordern 随笔 边看、边做、边想、边写 <<<数据视图处理点滴 | 首页 | 老胡的婚礼>>> 打印与打印预览 时间:2004-05-13 天气暖洋洋,坐在实验室内看外面甚至有点辣辣的感觉。困得要死,补写一篇日记,以解睡意。 VC6.0 Application Wizard为我们生成的打印代码(如果你有选择的话)已经具备打印机设置、打印、预览等功能了,好像程序员已经不需要自己再懂脑筋+手指头了,事实如此吗?答案是否定的啦^_^。虽然Wizard为我们生成了几乎可以使用的打印代码,但是这样的功能不符合我们的要求,比如打印文档大小并不符合常见纸张大小(比如A4)。如果是一个大号文档,程序员需要自己设定分页标准,程序员可能需要自己设定打印页面的页眉、页底、页码等等。可能需要在每份打印任务里自动添加封面、封底等等,所有这些自定义的特征都需要程序员自己来改写特定的函数。那么,我们到底可以改写哪些函数呢?在这么多的可以改写的函数里,我们分别可以、或者说应该改写哪些特征呢?要回答这些问题,需要详细了解一下MFC的FrameWork的打印机制到底如何的。 Framework依次调用下列函数来进行打印任务的执行: CMyView::OnPreparePrinting()//可以设定文档大小、预览模式等 CMyView::OnBeginPrinting() //可以配置GDI资源等 CDC::StartDoc() CMyView::OnPrepareDC() //改变viewpoint原点、剪裁区等,实现分页等 CDC::StartPage() CMyView::OnPrint() //设置打印页特有的特征,比如页眉、页码等 CDC::EndPage() CDC::EndDoc() CMyView::OnEndPrinting() //释放GDI资源等 其中,蓝色标志的是虚函数,即实际Framework代码中是靠this指针调用这些函数的,而且这些函数都是CView的虚函数,如果应用程序代码中没有改写它的话,程序会使用CView中的该函数,如果应用程序有改写这些函数,则程序会调用改写后的CMyView的函数。 尽管Wizard已经为程序员生成了许多框架,不过可以看到,对于文档向打印页面转换的分页、打印美化等工作还是需要程序员自己丰衣足食的啊。 特别的,CView::OnPrint()和CView::OnPaint()这两个虚函数都是通过调用CView::OnDraw()来显示文档内容的,所不同的是,CView::OnPrint()是由打印命令触发被调用,而CView::OnPaint()是系统发送WM_PAINT消息给应用程序后由应用程序自动调用的。换句话说,CView::OnDraw()里执行的操作是打印页面和显示视图共同的内容。显然,页眉、页码等打印页面特有的操作必须在CView()::OnPrint()里执行,而网格、列表等显示视图特征必须在CView::Paint()中执行。 bordern 发表于 2004-05-13 13:49 引用Trackback(0) | 编辑 评论 发表评论 最后更新 过完万圣节 使用 DirectSound API 编程 我要渡周末 最长的一个工作周 这个假期不太长 郁闷 回收内存 版本升级快、动作大 时间冲淡一切 ASP.net 之 Html 控件