论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

在CFormView中实现打印_VC技术_C语言教程

文章类别:C语言程序设计 | 发表日期:2010-6-19 14:19:51

在CFormView中实现打印_VC技术_C语言教程

本文来自21视频教程网C语言频道

在Microsoft Visual C++中,CFormView是一个非常有用的视类,CFormView类允许在视中放置控制,进一步可以放置ActiveX控件,并且可以利用ResourceWizard直接进行编辑。但是,CFormView不支持打印及打印预览,我们可以利用考屏功能将CFormView的窗口打印出来。


  一、 定义可打印的CFormView类


  首先,利用ClassWizard生成一个新类CPrintView ,继承于CFormView类,在CPrintView中定义如下变量:

  CRect m_rect; //保存得到的打印机打印区域大小

  CBitmap* m_pBmp; //屏幕拷贝为一个CBitmap

  CDC* m_pMemDC; //一个内存设备环境,兼容与打印机的设备环境

  BOOL m_bFlag; //一个BOOL变量,用于决定只创建m_pBmp和m_pMemDC一次

  然后,重载以下函数:

  virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

  virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

  virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

  virtual void OnPrint(CDC* pDC, CPrintInfo*);


  二、 在CPrintView类的构造函数中初始化变量


  CPrintView::CPrintView() : CFormView(CPrintView::IDD)

  {

   m_pMemDC = new CDC;

   m_pBmp = new CBitmap;

   m_bFlag = FALSE;

   //{{AFX_DATA_INIT(CPrintView)

   // NOTE: the ClassWizard will add member initialization here

   //}}AFX_DATA_INIT

  }


  三、 重载CPrintView::OnBeginPrinting()函数


  void CPrintView::OnBeginPrinting(CDC* pDC, CPrintInfo* /*pInfo*/)

  {

  m_pMemDC-〉CreateCompatibleDC(pDC); //创建兼容与打印机设备环境的内存设备环境,将内存设备环境的指针保存在m_pMemDC中

  CClientDC dc(this); //得到窗口用户区的设备环境,保存在dc中

  CRect rect;

  GetClientRect(rect); //得到窗口用户区的矩形区域,保存在rect中

  m_pMemDC-〉SetMapMode(MM_ANISOTROPIC); //设置映射方式为

  MM_ANISOTROPIC

  m_pMemDC-〉SetWindowExt(dc.GetDeviceCaps(LOGPIXELSX),

  dc.GetDeviceCaps(LOGPIXELSY));

  m_pMemDC-〉SetViewportExt(m_pMemDC-〉GetDeviceCaps(LOGPIXELSX),

  m_pMemDC-〉GetDeviceCaps(LOGPIXELSY)); //设置坐标系

  if (m_bFlag == FALSE)

  {

  m_pBmp-〉CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());

  } //创建兼容与dc的CBitmap

  m_pMemDC-〉SelectObject(m_pBmp); //选择GDI对象

  dc.DPtoLP(rect); //将设备坐标转换为逻辑坐标

  m_rect = rect; //保存窗口用户区矩形

  m_pMemDC-〉BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);

  //将dc复制到m_pMemDC

  if (m_bFlag == FALSE)

  m_bFlag = TRUE; //判断是否第一次运行

  }


  四、 重载CPrintView::OnPrint()函数


  void CPrintView::OnPrint(CDC* pDC, CPrintInfo*)

  {

  pDC-〉SetMapMode(MM_ANISOTROPIC); //设置打印机设备环境的坐标系为

   MM_ANISOTROPIC

  pDC-〉SetWindowExt(m_pMemDC-〉GetDeviceCaps(LOGPIXELSX),

  m_pMemDC-〉GetDeviceCaps(LOGPIXELSY));

  pDC-〉SetViewportExt(pDC-〉GetDeviceCaps(LOGPIXELSX), //设置坐标系

  pDC-〉GetDeviceCaps(LOGPIXELSY));

  pDC-〉StretchBlt(0,0,m_rect.Width(),m_rect.Height(),

  m_pMemDC,0,0,m_rect.Width(),m_rect.Height(),SRCCOPY); //在打印机设备环境中绘制内存设备环境中的图形

  }


  五、 需要将析构函数改写


  CPrintView::~CPrintView()

  {

  delete m_pMemDC; //删除内存设备环境

  delete m_pBmp; //删除CBitmap的指针

  }  

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058