当前位置:编程学习 > VC++ >>

VC怎么把输出从屏幕转向打印机

追问:追问1:如何实现逐行显示打印内容,同时逐行打印 追问2:不使用MFC,仅仅VC,能否实现对话框形式?如何?
答案:标准输出设备stdout,默认为显示器,把它重定向成打印机prn就行了
就是在VC的开头处加上freopen("prn","w",stdout);

例如:
#include <stdio.h>

int main()
{
      freopen("prn","w",stdout);
      printf("Hello!\n");     /* 这个Hello将被输出于打印机 */
      return 0;
}
其他:用OnPrint()或者在OnDraw(CDC *pDC)中用IsPrinting() 判断,pDC可能指向显示器,也可能指向打印机。输出语句都是一样的,至于打印动作,则是靠OnFilePrint()函数来完成pDC的重定向,这个OnFilePrint是MFC内置函数,它的代码在MFC\SRC\VIEWPRNT.CPP中,自己看去,反正我是看不明白了。不过你可以通过这篇文件学习下
http://hi.zhaoxi.net/dajiangfengdu2/blog/item/9fd94bc5945ad4c038db4920.html

IsPrinting()CDC类成员
  IsPrinting 确定正在使用的设备上下文是否用于打印
  以前我们进行的输出工作都是向屏幕上的一块窗口区域中进行,而打印则是打印机向打印纸上输出一些东西。的确,这两者之间有很大的相似性,比如,它们都能输出文本,也都能输出一些图形。正是基于这些相似性,在 Windows 中,用设备上下文将它们之间的共性统一起来了。你在进行打印和输出时,你可以用相同的输出函数(如TextOut)来往屏幕或打印纸上输出。 Windows 会在不同的情况下,将输出联系到相应的设备上。但是这并不意味着我们可以完全不考虑这两者之间的差别,而认为我们只要实现了屏幕输出功能就自动地实现了相应的打印功能。毕竟,它们之间有一些无法统一的差别:打印时,有页和分页的概念,即数据或输出是有条理地组织在一张张有一定大小的纸上;而屏幕输出时,则没有页和分页的功能,同时,可以认为屏幕输出的输出区域是没有大小限制的,超出窗口范围的,我们可以用滚动条来滚动。
  CView 有这样三个虚拟函数:OnPaint(),OnDraw(CDC *pDC),OnPrint()。OnPaint()是当视类窗口需要在屏幕上输出时被调用,负责完成窗口的屏幕输出显示工作;OnPrint()是当打印一页时被调用,负责完成向某页打印纸上打印。这两个函数的缺省实现中包含了对OnDraw(CDC *pDC)的调用。我们以前的程序中,并不考虑打印问题,所以我们被告之在OnDraw 中考虑如何完成屏幕输出工作。但现在不一样了,我们在OnDraw 中添加代码时,必须小心这有可能是在进行打印,并不是向一个窗口中输出。如果这两者在程序中不能统一,就必须分开考虑。分分开考虑有两种方法:一是分别在 OnPaint和OnPrint 中完成屏幕输出和打印输出工作,而不必依赖于OnDraw。二是在OnDraw 中,我们可以调用pDC_>IsPrinting() 来识别目前是在进行哪种输出工作。如果是在进行打印,pDC_>IsPrinting()返回true。这样我们就可以在OnDraw 中区别对待了。 
yjf_victor 说的方法很不错,想直接打印又不想出打印对话窗体的话,很有用,学习了。 ........

上一个:请教关于VC中的位图问题
下一个:关于vc++6.0一楼的问题,楼上的朋友快来帮帮我把

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,