欢迎来到天天文库
浏览记录
ID:38342634
大小:17.89 KB
页数:3页
时间:2019-06-10
《改变Push Button背景色》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、改变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(LP
2、DRAWITEMSTRUCTlpDIS);//必需重载的函数public:COLORREFm_fg,m_bg,m_disabled_fg,m_disabled_bg;//四种颜色分别为文字,背景,失效时文字,失效时背景};实现DrawItemvoidCCButton::DrawItem(LPDRAWITEMSTRUCTlpDIS){CDC*pDC=CDC::FromHandle(lpDIS->hDC);//???????DCUINTstate=lpDIS->itemState;//得到状态CRectfocusRect,btnRect;//两个矩形,表示得当输入焦点时的虚线矩形和按钮矩
3、形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(...
4、)填充按钮内部//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代
5、替原来按钮的窗口过程。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);}
此文档下载收益归作者所有