我建了一个SDI工程,在OnCreate中创建我的Static控件
int CMyViewTestView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

m_static.Create("Static",
WS_CHILD|WS_VISIBLE,//|WS_BORDER,
CRect(5,600,80,620),
this,
IDC_STATIC1
);
return 0;
}
重载
HBRUSH CMyViewTestView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
//HBRUSH hbr = CView::OnCtlColor(pDC, pWnd, nCtlColor);
HBRUSH hbr=CreateSolidBrush(RGB(0,255,0));//hbr为你要设的背景色,
switch(pWnd->GetDlgCtrlID()) 

case IDC_STATIC1: 
pDC->SetBkMode(TRANSPARENT); 
//pDC->SetBkColor(RGB(0,255,0));
pDC->SetTextColor(RGB(255,0,0)); 
//return (HBRUSH)GetStockObject(HOLLOW_BRUSH); 
default: 
break; 
}  return hbr;
}
但是运行后控件还是原来的底色,没有变成透明。但是代码试过了再Dialog下是可以的。请高手指点一下。谢谢!

解决方案 »

  1.   

    重载
    OnEraseBkgnd(CDC* pDC)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CBrush brush(你的颜色);
    CRect rect;
    pDC->GetClipBox(rect); 
    GetClientRect(rect);
    pDC->FillRect(rect,&brush); 
    return true;
    //return CView::OnEraseBkgnd(pDC);

    如果还不行,就把hbr放到类里,OnCreate的时候HBRUSH hbr=CreateSolidBrush(RGB(0,255,0));
    在Onctlcolor里返回hbr。
      

  2.   

    忘了说,视图类里OnEraseBkgnd和Onctlcolor两个一起用就可以让你的static控件背景成OnEraseBkgnd里面的颜色。