表格疯狂地调整大小

时间:2012-05-16 21:44:48

标签: c++ buffer gdi flicker

好的,对于我的主要父母在我的表单上使用常用控件,当我调整大小时,所有内容都会不停地闪烁。

我的表格上有以下控件:

  1. 按钮
  2. 静态
  3. RTF
  4. 状态栏
  5. 带有工具栏和一些rebands的钢筋
  6. 现在我将WM_ERASEBKGND设置为true,这样它就不会删除我的表单背景,因为它们会导致闪烁。

    我还将我的windows类hbrBackground设置为0,同样使用窗口类样式也是0。

    我的父表单为样式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;
    

    flickering http://phantomworksstudios.com/cpp/flickeringpng.png

    当我在另一个论坛中提到并且有人提到将我的窗口子类化为绘制程序时,我对此非常迷茫,因为这是他为标签控件所做的。

    这有点让我感到困惑,因为当我无法访问WM_PAINT时,为什么我必须将我的论坛子类化?

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

    如果您还有其他需要,请告诉我。

    附加说明:

    我也改变了某个区域的bitblt大小。

    现在继承了这个东西,bitblt闪烁的区域,而我的其余窗口没有,因为当我调整大小时,它会留下表单中其他控件的踪迹。

    flickeringarea http://phantomworksstudios.com/cpp/flickeringarea.png

0 个答案:

没有答案