void CMyStatic::OnPaint() 
{
CPaintDC dc(this);
...
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(0, 0, 0));
dc.DrawText(m_text, nLen, &ClientRect, nFormat);
...
ReleaseDC(&dc);
}每次drawtext可以正常输出,但是上次的输出却不能清除
怎样才能在输出前,将背景清空?

解决方案 »

  1.   

    或者获得整个rect,用brush填充一下
      

  2.   

    我的类是重CStatic派生的,怎样获得背景色的brush呢?
      

  3.   

    FillRect()也要用背景色的brush
    我该怎样获得背景色的brush?
      

  4.   

    还是不行呀
    RECT ClientRect;
    GetClientRect(&ClientRect); InvalidateRect(&ClientRect,TRUE);
    还是不能清除背景
      

  5.   

    不是一直要显示的东东不要放在OnPaint中显示,否则,只要一重绘又会将原来的显示出来,你这不是背景不背景问题。你另做一个文本输出函数:
    RECT ClientRect;
    GetClientRect(&ClientRect);
    InvalidateRect(&ClientRect,TRUE);PaintDC dc(this);
    ...
    dc.SetBkMode(TRANSPARENT);
    dc.SetTextColor(RGB(0, 0, 0));
    dc.DrawText(m_text, nLen, &ClientRect, nFormat);
    ...
    ReleaseDC(&dc);
    在文本输出时就去调用,应该能行。祝顺利
      

  6.   

    没有brush,难道你不能自己创建一个使用吗?
    下面的代码就是例子
    如果还是不行的话,我把我的demo给你void CMyStatic::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here
    CBrush brush;
    CRect rect;
    this->GetClientRect(rect);
    brush.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));
    dc.FillRect(rect,&brush);
    dc.SetTextAlign(TA_CENTER);
    dc.SetBkMode(TRANSPARENT);
    dc.SetTextColor(RGB(255,0,0));
    dc.TextOut(rect.Width()/2,rect.Height()/2,m_text,m_text.GetLength()); // Do not call CStatic::OnPaint() for painting messages
    }
      

  7.   

    brush.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));
    dc.FillRect(rect,&brush);上面的代码就是用当前系统的背景色擦除当前的rect,这样也就将static 清屏了
      

  8.   

    响应WM_ERASEBKGND消息,windows在发WM_PAINT要发送它来擦除窗口背景.