您的位置:首页 > 其它

VS2010下如何改变Button颜色、背景、边框

2015-06-01 10:52 417 查看
之前一直使用BCB实现界面,现项目需要专用VS,用起来真感觉有点麻烦,为了区别鼠标是否已经按下或弹起状态,弄个Button,参考了好多资料,折腾了许久。

SHOW 一下鼠标按下前和鼠标弹起来后的颜色变化,调试结果。

鼠标 按下



鼠标 弹起后



实现思路过程:重载DrawItem函数,实现重绘Button。

void CBtnClr::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{

CDC dc;

dc.Attach(lpDrawItemStruct->hDC);//得到绘制的设备环境CDC

VERIFY(lpDrawItemStruct->CtlType==ODT_BUTTON);

const int bufSize = 256;

TCHAR buffer[bufSize];

GetWindowText(buffer, bufSize);

//CString strText;

//GetWindowText(strText);

int size=strlen(buffer);

DrawText(lpDrawItemStruct->hDC,buffer,size,&lpDrawItemStruct-

>rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);//绘制文字

SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);//透明

if (lpDrawItemStruct->itemState&ODS_SELECTED)//当按下按钮时的处理

{////重绘整个控制

CBrush brush(m_DownColor);

dc.FillRect(&(lpDrawItemStruct->rcItem),&brush);//利用画刷brush,填充矩形框

DrawText(lpDrawItemStruct->hDC,buffer,size,&lpDrawItemStruct-

>rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);

SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);

}

else//当按钮不操作或者弹起时

{

CBrush brush(m_UpColor);

dc.FillRect(&(lpDrawItemStruct->rcItem),&brush);//

DrawText(lpDrawItemStruct->hDC,buffer,size,&lpDrawItemStruct-

>rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);

SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);

}

if ((lpDrawItemStruct->itemState&ODS_SELECTED)&&(lpDrawItemStruct->itemAction &

(ODA_SELECT|ODA_DRAWENTIRE)))

{//选中了本控件,高亮边框

COLORREF fc=RGB(255-GetRValue(m_UpColor),255-GetGValue(m_UpColor),255-GetBValue

(m_UpColor));

CBrush brush(fc);

dc.FrameRect(&(lpDrawItemStruct->rcItem),&brush);//用画刷brush,填充矩形边框

}

if (!(lpDrawItemStruct->itemState &ODS_SELECTED) &&(lpDrawItemStruct->itemAction &

ODA_SELECT))

{

CBrush brush(m_UpColor);

dc.FrameRect(&lpDrawItemStruct->rcItem,&brush);//}

dc.Detach();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: