1

好的,所以对于在我的表单上具有公共控件的主要父母来说,当我调整它的大小时,一切都会不停地闪烁。

休闲控制在我的表格上:

  1. 纽扣
  2. 静止的
  3. RTF
  4. 状态栏
  5. 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;

闪烁
(来源:phantomworksstudios.com

当我在另一个论坛上询问时,我对此感到非常迷茫,有人提到将我的窗口子类化以进行绘制过程,因为这就是他为他的选项卡控件所做的事情。

这让我更加困惑,因为当我可以在没有它的情况下访问 WM_PAINT 时,为什么我必须对我的论坛进行子类化?

如果我没记错的话,这与在我的 Winproc 下编辑它而不是创建另一个会做同样事情的另一个不是一样吗?

如果您还需要什么,请告诉我。

补充说明:

我还更改了某个区域的 bitblt 的大小。

现在事情就是这样,bitblt 闪烁的区域会闪烁,而我的其余窗口则不会,因为当我调整它的大小时,它会留下表单的其他控件的痕迹。

闪烁区域
(来源:phantomworksstudios.com

4

0 回答 0