编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 文档/视图应用程序打印
  · 文档/视图应用程序打印

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  110 篇
技术分:  1160 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 14:12:38
          楼主

文档/视图应用程序打印
在MFC的文档/视图结构中内置了功能强大的打印和打印预览功能,大大的简化了用户对于打印的编辑。用户在编写打印程序时,需要重载OnDraw函数,通过该函数可以将图像输出到屏幕上,在打印时,用户选择“文件”/“打印”命令,窗口将把打印机的的设备上下文传递给OnDraw函数,从而实现在打印机上绘制图像。
在OnDraw函数中调用IsPrinting函数,IsPrinting函数用于确定正在使用的设备上下文是否用于打印。
语法:
BOOL IsPrinting( ) const;
返回值:使用打印机设备上下文时返回非零值。
例如,文档/视图应用程序打印,程序设计步骤如下:
(1)创建一个基于文档/视图结构的应用程序。
(2)在视图类的头文件中声明变量,代码如下。
 int screenx,screeny;   //屏幕每英寸像素数
 int printx,printy;      //打印机每英寸像素数
 double ratex,ratey;     //打印机与屏幕的像素比率
 CFont m_Font;          //文本字体
 CString str[6];         //保存本文的数组
(3)添加PrintText函数,在该函数中设置打印文本。
(4)重载OnBeginPrinting函数,在该函数中获得打印机每英寸像素数,并技术打印机与屏幕的像素比率,代码如下。
void CPrintView::OnBeginPrinting(CDC* pDC, CPrintInfo* /*pInfo*/)
{
 //获取打印机每英寸像素数
 printx =pDC->GetDeviceCaps(LOGPIXELSX);
 printy =pDC->GetDeviceCaps(LOGPIXELSY); 
//计算打印机与屏幕的比率
 ratex = (double)printx /screenx;
 ratey = (double)printy /screeny;
}
 注意:打印机的打印分辨率与计算机的屏幕分辨率是不同的。为了将窗口的中信息原样输出到打印机中,我们需要处理计算打印机与屏幕分辨率的比率。
(5)重载OnDraw函数,在应用程序窗口中绘制打印文本,代码如下。
void CPrintView::OnDraw(CDC* pDC)
{
 CPrintDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 //获取屏幕每英寸像素数
 screenx =pDC->GetDeviceCaps(LOGPIXELSX);
 screeny =pDC->GetDeviceCaps(LOGPIXELSY);
 PrintText();           //设置打印文本
 if(pDC->IsPrinting())          //判断是否打印
 {
  m_Font.CreatePointFont(int(150*ratex),"宋体");    //创建字体
   pDC->SelectObject(&m_Font);       //将字体选入设备上下文
   for(int i=0;i<6;i++)         
   {
    pDC->TextOut(int(50*ratex),int((30+i*40)*ratey),str[i]); //绘制文本
   }
 }
 else             //不打印时
 {
  m_Font.CreatePointFont(150,"宋体");     //创建字体
  pDC->SelectObject(&m_Font);       //将字体选入设备上下文
  for(int i=0;i<6;i++)
  {
   pDC->TextOut(50,30+i*40,str[i]);     //绘制文本
  }
 }
 m_Font.DeleteObject();         //释放字体
}
程序运行效果如图1所示。
 
图1  文档/视图应用程序打印

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页