读书人

MFC 中使用Static Text 字上面有背景

发布时间: 2012-10-14 14:55:07 作者: rapoo

MFC 中使用Static Text ,字下面有背景色 怎么去掉?
MFC 中使用Static Text ,字下面有背景色 怎么去掉? 还有Tab Control 那个标签下面也有背景色?? 跪求各位高手指点!!!!

[解决办法]
好像得重写一个继承Static Text的类,在这个类的消息WM_CTLCOLOR中设定透明效果
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC-> SetBkMode( TRANSPARENT );
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}

[解决办法]
MSDN的解决办法:

How do I change the background color of a view?

To change the background color for a CView, CFrameWnd, or CWnd object, process the WM_ERASEBKGND message. The following code shows how:

BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
{
// Set brush to desired background color.
CBrush backBrush(RGB(255, 128, 128));
// Save old brush.
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect); // Erase the area needed.
pDC->PatBlt(rect.left, rect.top, rect.Width(),
rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
}

I solved the problem like this:

HBRUSH dlgtest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor)
{
case CTLCOLOR_BTN:
case CTLCOLOR_STATIC:
{
pDC->SetBkMode(TRANSPARENT);
}
case CTLCOLOR_DLG:
{
CBrush* back_brush;
COLORREF color;
color = (COLORREF) GetSysColor(COLOR_BTNFACE);
back_brush = new CBrush(color);
return (HBRUSH) (back_brush->m_hObject);
}
}
return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));
}


[解决办法]
WM_CTLCOLOR消息里SetBkMode(TRANSPARENT);
[解决办法]

探讨

WM_CTLCOLOR消息里SetBkMode(TRANSPARENT);

读书人网 >VC/MFC

热点推荐