VC++中关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别
而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:虚函数,需要重载
OnDrawItem是画窗口中的子控件的,因为它的入口参数LPDRAWITEMSTRUCT带入不同子控件的相关参数,而且,你得把字控件设置成“自画”类型,才会调用到OnDrawItem,顺便说一下自画,不是所有设置成自画类型的控件都会调用父窗口的OnDrawItem,例如ListBox的自画,你就必须重载CListBox的DrawItem方法和MeasureItem方法才可以,但象菜单,按钮等的自画则会调用OnDrawItem。
OnPaint和OnDrawItem不在一个范畴内,他是WM_PAINT的响应函数,凡是基于CWnd的类都有OnPaint事件发生,就是说凡是窗口都有WM_PAINT事件发生。
最新文章
- sqlmap --dns-domain模拟实践
- Lattice 的 Framebuffer IP核使用调试笔记之datasheet笔记
- ssh连接阿里云一段时间不操作自动断开
- asp.net推送
- 后台线程,优先级,sleep,yield
- Mirantis OpenStack HA
- Android 学习资源[转]
- ibatis中resultClass与resultMap 的区别
- git remote log error
- Winform常用的一些功能收集(持续更新)
- Android项目实战(四十三):夜神模拟器
- php配置虚拟主机
- SQL存储过程使用参考代码
- Git详解之一 Git实战
- 简单全局HOOK拦截大部分键盘消息
- C#类头部声明样式
- 各大公司java后端开发面试题
- mysql 3.2.49 源代码安装-redhat 5 x64
- C++之面向对象编程20170912
- 电力项目十四--js添加highslider特效
热门文章
- BZOJ4144: [AMPPZ2014]Petrol(最短路 最小生成树)
- 微信获取openId
- gulp实用配置(1)——demo
- Angular面试题四
- Atitit.resin  could not create the java virtual machine问题
- android之画板功能之橡皮擦 画笔大小和画笔颜色
- 一步一步 Pwn RouterOS之ctf题练手
- android 每个块半径不同的扇形图,自定义view
- Android资源文件说明
- Ionic Css样式详解