手动添加消息映射的方法实现改变按钮的颜色,不必创建新的类!
1.将button修改为owner draw 类型
2.重载OnDrawItem函数,并对其改写
在适当的位置添加下面的语句
afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
ON_WM_DRAWITEM()
3.在消息响应函数里添加如下代码:
void CXXX::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
CString strText;
((CButton *)GetDlgItem(nIDCtl))->GetWindowText(strText);
SetBkMode(lpDrawItemStruct->hDC, TRANSPARENT);
//if (lpDrawItemStruct->itemState&ODS_SELECTED)
{
CBrush brush(RGB(255, 0, 0));
dc.FillRect(&(lpDrawItemStruct->rcItem), &brush);
DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
&lpDrawItemStruct->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
SetBkMode(lpDrawItemStruct->hDC, TRANSPARENT);
}
dc.Detach();
}
可以参考:http://blog.sina.com.cn/s/blog_65cab32d01013uad.html
本文介绍了一种不通过创建新类而手动更改按钮颜色的方法。主要步骤包括:将按钮设置为OwnerDraw类型,重载OnDrawItem函数并进行相应修改。在消息响应函数中通过CDC绘制背景和文字。
5160

被折叠的 条评论
为什么被折叠?



