控件重绘一

来源:互联网 发布:淘宝刷钻一天完成 编辑:程序博客网 时间:2024/05/21 11:36
1、按照MS设计思想,父窗口负责子窗口重绘,在父窗口允许你重绘每一个子控件
这也就是说MS可以是你在不重载通用控件的情况下实现子控件重绘,一定程度上减少了开发人员的负担

当然,你可以派生自己的控件,在子控件里来实现重绘,以方便开发人员封装自己的控件,以供它用,来达到软件重用目的


2、按照这种思想:ms提供两个消息来重绘子控件

WM_CONTCOLOR WM_DRAWITEM,这两个消息是在父窗口中处理的


3、派生自己的控件,MS提供了一个虚函数OnDrawItem方法,重载它就可以重绘控件本身了


4、有些控件自动加入WM_PAINT及其消息后,OnDrawItem方法就不能响应了,原因是MS在OnPaint中进行了一些处理,而你在响应时
并不知道进行了哪些处理,只做了自己的工作,这也就是为什么,在MS平台下开发时,很多时候做了自己的处理后还要调用响应的父类的成员函数

由此可以推断在父窗口的OnPaint函数中激发了OnDrawItem,每执行一次OnPaint如果没有进行窗口刷心逻辑处理的话,就会响应的调用OnDrawItem方法执行用户自己的绘制


5、子控件刷新问题
有时会发现,我设置了界面,为什么界面没有变化,而我使窗口最小后再还原界面就如期望了,产生这种问题的原因:界面刷新问题
如果用户设置了WS_CLIPCHILD 和WS_CLIPSLIBLING 两个属性后,会使父窗口刷新后并不会使子控件区域无效,子窗口也就不会响应刷新
解决办法:调用子控件的Invalidate(true),或者 redrawwindow刷新子窗口
0 0
原创粉丝点击