VC窗口程序闪烁的问题解决

小默原创,转载请保留原文链接:http://blog.csdn.net/wshjldaxiong/article/details/8896054

这里介绍一下 win32 C api 写的 windows 程序在调整窗口大小时闪烁严重的问题的解决方法,纯属个人经验,有不完善或不恰当之处欢迎指正。

首先,主窗口需要设置 WS_CLIPCHILDREN 风格,即子窗体裁剪,也就是说,子窗体(控件)覆盖的区域,由子窗体自行重绘,父窗体不管。这时你会发现有控件的地方都不闪了。

然后,截取 WM_ERASEBKGND 消息,这里是填充背景的地方,也就是以背景色填充擦除掉杂色,自己进行处理,不该擦的地方就别擦。那该擦的地方自己怎么来擦呢?看例程

//hBKBrush = CreateSolidBrush(GetSysColor(COLOR_3DFACE));
hBKBrush = GetSysColorBrush(COLOR_3DFACE);
FillRect(hdc, &rect, hBKBrush);
//DeleteObject(hBKBrush);

简单说就是 Get 到系统颜色,然后画上去就是了。

如果窗体内有 Group box 控件,记得设置 WS_EX_TRANSPARENT 属性,不然会有很奇怪的现象。

如果只是单纯的想更改背景的颜色可以这么写:

wcex.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);


你可能感兴趣的:(VC窗口程序闪烁的问题解决)