而OnPaint()是CWnd的类成员,同时负责响应WM_PAINT消息。

OnDraw()是CVIEW的成员函数,并且没有响应消息的功能。这就是为什么你用VC成的程序代码时,在视图类只有OnDraw没有OnPaint的原因。

我们一般用OnPaint维护窗口的客户区(例如我们的窗口客户区加一个背景图片),用OnDraw维护视图的客户区(例如我们通过鼠标在视图中画图)。

=====================================================================================================================

1.OnPaint: WM_PAINT
  消息函数,接受到WM_PAINT消息时,首先调用的是onpaint(),onpaint()再调用ondraw()

OnPaint()-àOnDraw();

2.OnDraw:虚函数,需要重载

3.OnDrawItem: WM_DRAWITEM

子控件有自画属性且控件需重画时,父窗口会调用该函数

在具有Owner Draw属性的控件需要重画的时候,就会激发OnDrawItem

当自画子按钮控件、组合框控件、列表框控件或菜单的可视部分需要被画出时调用这个函数

OnDrawItem()-àDrawItem();

4.DrawItem:虚函数,需要重载

  如果使用DrawItem来自画控件,需要给控件加上自画样式,然后重载该控件类的自画函数(DrawItem)函数,如果该控件的父窗口提供了ON_WM_DRAWITEM消息映射宏,并重载了OnDrawItem函数,则重画消息会由父窗口处理,父窗口调用基类的OnDrawItem来调用派生的子控件的DrawItem函数.
 
======================================================================================================================

OnDrawItem是画窗口中的子控件的,因为它的入口参数LPDRAWITEMSTRUCT带入不同子控件的相关参数,而且,你得把字控件设置成“自画”类型,才会调用到OnDrawItem,顺便说一下自画,不是所有设置成自画类型的控件都会调用父窗口的OnDrawItem,例如ListBox的自画,你就必须重载CListBox的DrawItem方法和MeasureItem方法才可以,但象菜单,按钮等的自画则会调用OnDrawItem。

OnPaint和OnDrawItem不在一个范畴内,他是WM_PAINT的响应函数,凡是基于CWnd的类都有OnPaint事件发生,就是说凡是窗口都有WM_PAINT事件发生。

最新文章

  1. sqlmap --dns-domain模拟实践
  2. Lattice 的 Framebuffer IP核使用调试笔记之datasheet笔记
  3. ssh连接阿里云一段时间不操作自动断开
  4. asp.net推送
  5. 后台线程,优先级,sleep,yield
  6. Mirantis OpenStack HA
  7. Android 学习资源[转]
  8. ibatis中resultClass与resultMap 的区别
  9. git remote log error
  10. Winform常用的一些功能收集(持续更新)
  11. Android项目实战(四十三):夜神模拟器
  12. php配置虚拟主机
  13. SQL存储过程使用参考代码
  14. Git详解之一 Git实战
  15. 简单全局HOOK拦截大部分键盘消息
  16. C#类头部声明样式
  17. 各大公司java后端开发面试题
  18. mysql 3.2.49 源代码安装-redhat 5 x64
  19. C++之面向对象编程20170912
  20. 电力项目十四--js添加highslider特效

热门文章

  1. BZOJ4144: [AMPPZ2014]Petrol(最短路 最小生成树)
  2. 微信获取openId
  3. gulp实用配置(1)——demo
  4. Angular面试题四
  5. Atitit.resin  could not create the java virtual machine问题
  6. android之画板功能之橡皮擦 画笔大小和画笔颜色
  7. 一步一步 Pwn RouterOS之ctf题练手
  8. android 每个块半径不同的扇形图,自定义view
  9. Android资源文件说明
  10. Ionic Css样式详解