小默原创,转载请保留原文链接: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);