MFC闪屏解决方案

这两天一直在做UI设计,由于公司没有用到商业的Direct UI等界面库。所以码农们必须自己绘制自己的控件,于是乎这个编写UI的任务就落在我这个新码农身上了。然后以前一直逃避的问题有不期而遇。思密达。
问题一、自己绘制的背景把界面上原有的控件遮挡住了,为了解决这个问题,可把我等吊丝累坏了。
方案一、绘制完背景,然后再获取所有控件的区域,使其无效。于是问题解决了,可是新问题又来了,就是闪屏问题。这个问题就是由于背景与控件颜色覆盖造成的。也就是说着这种方案太监了。
方案二、把所有的控件的矩形计算出来,在绘制的时候去除这些矩形。对于这种方案,我只是想了想,应该可以。不过太难了,我是没有能力做到。
方案三、偶然的机会看到一句话:把dialog的ClipChildren属性设置为true。意思就是,在绘制窗口的时候,把控件区域剪切掉,等绘制完成后在复制回来,这个属性简直就是为绘制量身定制的,于是上面的问题解决了,并且如此简单,就点一下。原来解决方案如此简单。
如果频繁进行绘制刷新,这个毫无疑问会出现闪屏的情况。
方案一、运用双缓冲,无压力。就是在每次绘制的时候,直接贴上去。
方案二、在画背景之前把背景画刷设置为NULL_BRUSH。系统无法绘制。
方案三、把绘制背景的函数(OnEraseBkgnd(CDC*   pDC))内容注视掉,用return true替代,然后系统就没有办法利用默认画刷绘制背景了。但是后面两种方式解决了闪烁,但是界面会是一团糟。


使用GDI资源小结:
首先我们都知道有借有还这个定律,所以在学习C++的时候无比遵循这个规律,否则你会连连碰壁。
在使用带H的句柄的时候,例如:HBITMAP等,用完之后记得DeleteObject;
而对于带C的GDI封装类,则没有这个必要,以为在对象析构的时候,系统已经把他们释放了。如果你把系统资源句柄与类Detach了,那么你就需要接手系统资源管理,否则就要出现系统资源泄漏的。
用CDC的时候,如果创建了内存Dc用完之后也需要DeleteDc.....



你可能感兴趣的:(MFC闪屏解决方案)