45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:改变Push Button背景色的方法

改变Push Button背景色的方法

2016-09-04 08:14:01 来源:www.45fan.com 【

改变Push Button背景色的方法

改变Push Button背景色

改变PushButton背景色



在Windows中Edit,StaticBox的背景色都可以通过处理WM_CTLCOLOR消息来改变,但PushButton却不行。

唯一的方法是使用OwnerDraw风格的按钮。本文讲述的方法是使用CButton的派生类。

classCCButton:publicCButton
{
DECLARE_DYNAMIC(CCButton)
public:
CCButton();
virtual~CCButton();
BOOLCCButton::Attach(constUINTnID,CWnd*pParent)

protected:
virtualvoidDrawItem(LPDRAWITEMSTRUCTlpDIS);//必需重载的函数

public:
COLORREFm_fg,m_bg,m_disabled_fg,m_disabled_bg;//四种颜色分别为文字,背景,失效时文字,失效时背景
};


实现DrawItem

voidCCButton::DrawItem(LPDRAWITEMSTRUCTlpDIS)
{
CDC*pDC=CDC::FromHandle(lpDIS->hDC);//???????DC

UINTstate=lpDIS->itemState;//得到状态
CRectfocusRect,btnRect;//两个矩形,表示得当输入焦点时的虚线矩形和按钮矩形
focusRect.CopyRect(&lpDIS->rcItem);
btnRect.CopyRect(&lpDIS->rcItem);

//
//调整虚线矩形
//
focusRect.left+=4;
focusRect.right-=4;
focusRect.top+=4;
focusRect.bottom-=4;

//
//得当Button上文字
//
constintbufSize=512;
TCHARbuffer[bufSize];
GetWindowText(buffer,bufSize);

//使用m_fg,m_bg颜色利用Draw3dRect(...)绘制按钮边框

//FillRect(...)填充按钮内部

//DrawText(...)绘制文字

//根据当前状态调整显示
//
if(state&ODS_FOCUS){
.........//得到输入焦点,通过focusRect画虚线
if(state&ODS_SELECTED){
.....//被按下,绘制下陷边框
}
}
elseif(state&ODS_DISABLED){
//失效,通过m_disabled_fg,m_disabled_bg重绘按钮内部
}
}


CCButton是CButton派生类,具有CButton的全部成员函数,但在创建时需要使用BS_OWNERDRAW风格。

如果按钮不是动态生成,使用Attach函数使CCButton代替原来按钮的窗口过程。

BOOLCCButton::Attach(constUINTnID,CWnd*pParent)
{
GetDlgItem(nID)->ModifyStyle(0,BS_OWNERDRAW,0);

if(!SubclassDlgItem(nID,pParent))
returnFALSE;

returnTRUE;
}

如在一对话框的InitDialog(...)中加入下面几行

{//假定m_cbBtn为成员变量IDC_BUTTON1为一按钮ID值

m_cbBtn.Attach(IDC_BUTTON1,this);

}


 

本文地址:http://www.45fan.com/dnjc/72003.html
Tags: 改变 Button Push
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部