好的,所以对于在我的表单上具有公共控件的主要父母来说,当我调整它的大小时,一切都会不停地闪烁。
休闲控制在我的表格上:
- 纽扣
- 静止的
- RTF
- 状态栏
- Rebar 带有工具栏和一些 rebands
现在我将 WM_ERASEBKGND 设置为 true,这样它就不会擦除我的表单背景,因为他们说这也会导致闪烁。
我还将我的 windows 类 hbrBackground 设置为 0,与同样为 0 的 windows 类样式相同。
我的父窗体样式为 WS_OVERLAPPEDWINDOW。
此外,当我将 WS_CLIPCHILDREN 添加到我的父表单时,它仍然会闪烁。
现在在我的表格绘画程序下,我添加了这个:
case WM_PAINT:
Temp_Rect=SSMAIN_RECT;
// Get DC for window
hdc = BeginPaint(hwnd, &ps);
// Create an off-screen DC for double-buffering
hdcMem = CreateCompatibleDC(hdc);
hbmMem = CreateCompatibleBitmap(hdc, SSMAIN_WIDTH,SSMAIN_HEIGHT);
hOld = (HBITMAP)SelectObject(hdcMem, hbmMem);
// Draw into hdcMem here
// Transfer the off-screen DC to the screen
Temp_Rect.left=-200;
Temp_Rect.top=-200;
FillRect(hdcMem, &Temp_Rect, (HBRUSH) (COLOR_WINDOW+7));
BitBlt(hdc, 0, 0, SSMAIN_WIDTH, SSMAIN_HEIGHT, hdcMem, 0, 0, SRCCOPY);
// Free-up the off-screen DC
SelectObject(hdcMem, hOld);
DeleteObject(hbmMem);
DeleteDC (hdcMem);
EndPaint(hwnd, &ps);
break;
当我在另一个论坛上询问时,我对此感到非常迷茫,有人提到将我的窗口子类化以进行绘制过程,因为这就是他为他的选项卡控件所做的事情。
这让我更加困惑,因为当我可以在没有它的情况下访问 WM_PAINT 时,为什么我必须对我的论坛进行子类化?
如果我没记错的话,这与在我的 Winproc 下编辑它而不是创建另一个会做同样事情的另一个不是一样吗?
如果您还需要什么,请告诉我。
补充说明:
我还更改了某个区域的 bitblt 的大小。
现在事情就是这样,bitblt 闪烁的区域会闪烁,而我的其余窗口则不会,因为当我调整它的大小时,它会留下表单的其他控件的痕迹。