设为首页 加入收藏

TOP

17.7.1 重载窗体的OnPaint()函数
2013-10-07 14:38:49 来源: 作者: 【 】 浏览:50
Tags:17.7.1 重载 窗体 OnPaint 函数

17.7  GDI+与GDI共同实现双缓冲绘图

双缓冲绘图可以有效避免因屏幕重绘而造成的闪屏效果。虽然GDI与GDI+自身都能够实现双缓冲绘图的功能,但是GDI的功能有限,如本实例的翻页效果用GDI+实现就比较简单,是GDI所不能替代的。而由于GDI+的DrawImage()函数不能像GDI的BitBlt()函数那样简单地进行像素拷贝,所以只有将两者结合才能够实现设计简单、速度快捷的双缓冲绘图的功能。下面将详细介绍本实例中用到的GDI与GDI+结合实现双缓冲的方法。在本节仍用17.6节的对话框实例来讲解。

17.7.1  重载窗体的OnPaint()函数

一般窗体的重绘都是调用重载窗体的OnPaint()函数来实现,所以在OnPaint()函数中进行双缓冲绘图,是解决闪屏的有效途径。

  1. 01  void CMyAlbumDlg::OnPaint()   
  2. 02  {  
  3. 03      if (IsIconic())  
  4. 04      {  
  5. 05          CPaintDC dc(this);                          //设备描述符  
  6. 06          SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);  
  7. 07          int cxIcon = GetSystemMetrics(SM_CXICON);     
  8. 08          int cyIcon = GetSystemMetrics(SM_CYICON);  
  9. 09          CRect rect;  
  10. 10          GetClientRect(&rect);  
  11. 11          int x = (rect.Width() - cxIcon + 1) / 2;  
  12. 12          int y = (rect.Height() - cyIcon + 1) / 2;  
  13. 13          dc.DrawIcon(x, y, m_hIcon);  
  14. 14      }  
  15. 15      else  
  16. 16      {  
  17. 17          CDialog::OnPaint();  
  18. 18      }  
  19. 19  }  

【代码解析】

在原OnPaint()函数中仅仅处理了当窗体最小化时,绘制最小化图标的功能。一般用户添加的绘图功能也会被添加到这个函数。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇17.6.3 添加相关的宏定义 下一篇17.1.4 电子相册的技术简介

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: