当一个Dlg不是一种颜色时,如何消掉Static的背景只留下文字?看到一篇帖子这么写:CStatic m_s;   // 一个Static控件的变量CRect rect;
s.GetWindowRect( rect );
ScreenToClient( rect );
InvalidateRect( rect, TRUE );但我试了,这样不行,该怎么办?谢谢!

解决方案 »

  1.   

    应该是m_s.GetWindowRect( rect )笔误
      

  2.   

    在对话框的OnCtlColor中对static进行设置背景模式TRANSPARENT
    pDC->SetBkMode(TRANSPARENT);
      

  3.   

    这样不行,返回的hbr仍然遮挡了Dlg的颜色
      

  4.   

    子类化CStatic类,派生出自己的CXXXStatic类。然后重载OnPaint,在里面调用SetBkMode(TRANSPARENT);
      

  5.   

    void CDialogEx::CDialogEx

    m_hBkBrush = CreateSolidBrush(0x777777);
    }
    HBRUSH CDialogEx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    switch (nCtlColor) 

    case CTLCOLOR_MSGBOX:
    case CTLCOLOR_BTN:
    case CTLCOLOR_DLG:
    case CTLCOLOR_SCROLLBAR:
    case CTLCOLOR_STATIC:
    pDC->SetBkMode(TRANSPARENT);    <---  请注意该句
    return (HBRUSH) m_hBkBrush;
    case CTLCOLOR_EDIT:
    case CTLCOLOR_LISTBOX:
    default:
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
    }
    }
      

  6.   

    这只是让 Static 标签的背景和 Window 的背景色相同,Static 背景仍然不是透明的。