您的位置:首页 > 其它

改变CButton按钮控件的文本和背景颜色

2012-08-27 13:14 357 查看
派生一个CButton类(下面的CSXBtn就是), 重载DrawItem函数:

void CSXBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{

UINT uStyle = BS_DEFPUSHBUTTON ;//DFCS_BUTTONPUSH;

// This code only works with buttons.

ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);

// If drawing selected, add the pushed style to DrawFrameControl.

if (lpDrawItemStruct->itemState & ODS_SELECTED)

uStyle |= DFCS_PUSHED;

// Draw the button frame.

::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,

DFC_BUTTON, uStyle);

CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

// Get the button\'s text.

CString strText;

GetWindowText(strText);

// Draw the button text using the text color red.

CBrush B;

CRect rect;

CRect focusRect;

focusRect.CopyRect(&lpDrawItemStruct->rcItem);

DrawFocusRect(lpDrawItemStruct->hDC, (LPRECT)&focusRect);

focusRect.left += 4;

focusRect.right -= 4;

focusRect.top += 4;

focusRect.bottom -= 4;

rect.CopyRect(&lpDrawItemStruct->rcItem);

pDC->Draw3dRect(rect, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHILIGHT));

B.CreateSolidBrush(RGB(0,255,0));

::FillRect(lpDrawItemStruct->hDC,&rect, (HBRUSH)B.m_hObject);

::SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);

COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));

::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),

&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);

::SetTextColor(lpDrawItemStruct->hDC, crOldColor);

}

将对话框资源模板上的按钮添加一个控制变量, 类型就是你派生的这个类,

最后, 记得把按钮的ownerdraw属性选上. 搞定!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐