使用MFC编写打印程序

摘要

本文首先介绍了利用MFC提供的文档视图框架来实现一个打印程序,实现打印预览,在此基础上,同时通过对MFC源代码的深入探讨,提出了利用该方法在对话框上用MFC实现打印功能,结果表明,利用MFC实现打印不仅方便,而且功能很强大,能够根据不同的需求很方便的打印出所需要的格式。本文还实现了一个在对话框中利用MFC实现打印功能的一个框架结构,对于使用者只要使用该结构就可以按照自己的要求打印任何内容。

关键词:Visual C++ ,MFC,对话框, 打印 ,打印预览

引言

打印程序的编写在windows程序设计中非常有用,针对不同的用户需要,通常用sdk方式实现打印代码量比较大,而且要对打印流程的底层有非常清楚的了解,需要一个程序员有非常深入的打印方面的知识,利用MFC提供的文档视图结构,不但可以实现一些常用的标准界面元素,把数据的处理的界面的处理分离出来,而且其提供的打印功能更是方便快捷,功能强大。打印程序的编写本质是是一种GDI绘图,只是绘图的对象是在打印机的设备描述表,如果对于屏幕的GDI绘图比较熟悉的读者,相信掌握打印程序的编写应该比较容易。

1、文档视图结构的程序的打印程序的编写

通常情况下,一个结构组织的比较好的MFC程序是基于文档视图结构的,这一框架结构给我们提供了很多功能,比如菜单,注册表的关联,文件类型的注册,打印功能,只要我们善于发掘,这些都可以为我们所用,但我们现在只关心如何使用MFC提供的结构来实现打印功能。

在编写打印程序之前,有必要先介绍一下MFC的框架结构,其中的文档视图结构又是这个框架的重点,我们通过分析MFC实现的视图类的原代码就可以看到一个打印程序的执行流程。读者也可以看侯俊杰的《深入浅出MFC》,上面有关于MFC打印的详细流程解释,下面是MFC的打印的函数的实现,该函数名为OnFilePrint它不是一个虚函数,而是响应缺省的COMMAND消息的处理函数,因为MFC提供了向导生成的菜单和工具栏,关于打印的命令ID为ID_FILE_PRINT ,而在视图类的MessageMap里有这样一项,ON_COMMAND (ID_FILE_PRINT, CView::OnFilePrint),因此实际使用的过程中可以不用原来的ID, 而使用自己的ID如ID_MYPRINT,再在MessageMap里加入ON_COMMAND (ID_MYPRINT, CView::OnFilePrint)即可完成原来一样的功能。ViewPrnt.cpp中有CView的OnFilePrint的函数的具体实现,ViewPrnt.cpp的位置读者自己用windows查找就能找到,这是MFC的源代码,本文把其中的主要代码列出放在下面,直接看下面的分析:

void CView::OnFilePrint()
{
  // get default print info
  if (OnPreparePrinting(&printInfo))
  {
    if (dlg.DoModal() != IDOK)
      return;
  }
  OnBeginPrinting(&dcPrint, &printInfo);
  OnPrepareDC(&dcPrint, &printInfo);
  OnPrint(&dcPrint, &printInfo);
  OnEndPrinting(&dcPrint, &printInfo); // clean up after printing
}

其中加粗的代码行为可以重载的虚函数,根据不同的用户,其内容会不同。对于 OnPreparePrinting() 函数的具体内容必须有 return DoPreparePrinting(pInfo);这是在一个打印过程中最先调用的。当然也可以包含一些其它的打印初始化操作。我们最主要的是要重载三个函数:

OnBeginPrinting();
OnPrint();
OnEndPrinting();

时间: 2024-08-01 17:34:27

使用MFC编写打印程序的相关文章

c语言-编写一个程序,打印输入中的单词长度的直方图。垂直方图。

问题描述 编写一个程序,打印输入中的单词长度的直方图.垂直方图. 直方图是如何理解????求教这道题~~ 这道题目是书上的!有没有懂的大神.给讲解啊. 解决方案 问题是怎么解决的? 我想到的就是算好格式用printf()一行行的输入,最后拼成直方图.

windows-软件Visual C++ 6怎么利用MFC编写Windows控制台应用程序,帮忙补下代码

问题描述 软件Visual C++ 6怎么利用MFC编写Windows控制台应用程序,帮忙补下代码 过程步骤: 新建一个名称为MFCConsole的工程,工程的类型是Win32 Console Application,并且选择An empty project.完成之后插入一个C++源文件,文件名为MFCConsole.cpp,并输入如下代码. 程序.MFCConsole.cpp 这是书上代码. #include #include #include CWinApp theApp; int _tma

mfc-求教一个MFC编写程序的问题

问题描述 求教一个MFC编写程序的问题 我是新手想求教大家一个问题: 有一个单文档框架程序,当一启动的时候可以在状态栏里面显示时间, 我看书中的做法是这样的: 1,先定义和插入字符串ID. 2,在CXXXAPP类里面添加一个成员变量保存数据. 3在CXXXAPP类的构造函数里面得到系统时间,然后格式化数据. 4在CMAINFRAME的ONCREATE函数里面设置上刚才格式化的时间数据. 现在不明白的地方就是书中为何要在APP类里面做2和3项呢?如果我把步骤2和3放在 别的地方可以吗? 解决方案

此程序是 程序-编写一个程序,打印输入中各个字符出现频度的直方图

问题描述 编写一个程序,打印输入中各个字符出现频度的直方图 #include /* NUM_CHARS should really be CHAR_MAX but K&R haven't covered that at this stage in the book / #define NUM_CHARS 256 int main(void) { int c; long freqarr[NUM_CHARS + 1]; long thisval = 0; long maxval = 0; int t

mfc求助-mfc编写的语音识别程序

问题描述 mfc编写的语音识别程序 调用科大讯飞的接口,用mfc编写一个可以实现语音与文本之间相互转换功能的软件,还可以实现语音的控制功能

mfc-Windows平台的MFC编写mjpg-streamer上位机程序

问题描述 Windows平台的MFC编写mjpg-streamer上位机程序 本人的毕业论文,,想通过MFC编写mjpg-streamer的客户端界面,只有简单观看视频功能就好,原本的mjpg-streamer只能通过火狐浏览器的浏览,如果我编写界面的话,是不是要加解码器什么的,还查到论坛中有人说用webbrowser的,但具体如何使用完全没有思路 T T 请教各位~有什么思路 谢谢! 解决方案 意思一个摄像头,采集回来数据播放到mfc里面? 直接用得到的数据放到mfc的图像框中就行了吧,一帧一

64位-MFC编写的x64对话框程序,界面太丑,想做的漂亮点,有什么好的方法

问题描述 MFC编写的x64对话框程序,界面太丑,想做的漂亮点,有什么好的方法 MFC编写的x64对话框程序,界面太丑,想做的漂亮点,有什么好的方法?SKin++只在网上搜到32位的DLL,64位DLL搜不到 解决方案 去他们官方网站看看有没有,没有就自绘吧

接触VC之三:MFC基于对话框程序

最近,本人赶时髦,装上了一套Visual Studio.net,安装要2213M呢,硬盘上三个盘符总共剩下不足2G的地方了.不过,界面相当的漂亮,且功能强大,值得心慰.我终于可以在类视图上,尽情去看类的基类,以及基类的实现代码了.不仅如此,最好的是那附带的MSDN上所有的VC基础文章都是中文,翻译的比希望出版社的好得没的说.什么文档啊,框加窗口啊,多视图啊,应有尽有.所以建议大家都来用.net的吧,注意是要那七张盘的,三张的是beta版,VC功能不全的. 这部分该说一说MFC的具体程序了.因为我

mfc编写关于网络会议系统(基于web 2.0)

问题描述 mfc编写关于网络会议系统(基于web 2.0) mfc编写关于网络会议系统(基于web 2.0),一般都是什么步骤,为什么下载的代码不能用 解决方案 你连什么步骤都不知道,和一窍不通基本没有区别,给你的建议就是先学习下怎么编译和调试程序.下载的程序不能用很正常,网络程序先得把网络和数据库配置正确.