改变Push Button背景色

原创 2001年12月26日 08:34:00

改变Push Button背景色

闻怡洋

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

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

class CCButton : public CButton
{
DECLARE_DYNAMIC(CCButton)
public:
    CCButton();
    virtual ~CCButton();
    BOOL CCButton::Attach(const UINT nID, CWnd* pParent)

protected:
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);//必需重载的函数

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

实现DrawItem

void CCButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
    CDC* pDC = CDC::FromHandle(lpDIS->hDC);//???????DC

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

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

    //
    // 得当Button上文字
    //
   const int bufSize = 512;
   TCHAR buffer[bufSize];
   GetWindowText(buffer, bufSize);
   
   // 使用m_fg, m_bg颜色利用 Draw3dRect(...)绘制按钮边框

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

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

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

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

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

BOOL CCButton::Attach(const UINT nID, CWnd* pParent)
{
    GetDlgItem(nID)->ModifyStyle(0,BS_OWNERDRAW,0);

    if (!SubclassDlgItem(nID, pParent))
        return FALSE;

    return TRUE;
}

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

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

   m_cbBtn.Attach(IDC_BUTTON1,this);

}

改变Push Button背景色

改变Push Button背景色闻怡洋 01-9-12 下午 03:14:36在Windows中Edit,StaticBox的背景色都可以通过处理WM_CTLCOLOR消息来改变,但Push Butt...
  • pengquan
  • pengquan
  • 2004年12月28日 11:20
  • 259

如何更改MFC按钮的背景色

今天打算给自己写的工程上点色。但是在给按钮上色的时候出了点问题。在网上找的方法基本上都不管用。说得跟真的一样,各种OnCtrlColor()和OnEraseBkground(),各种技术帝的方法看起来...
  • dongsoso
  • dongsoso
  • 2013年10月27日 10:40
  • 1830

基于MFC如何修改按钮,窗体背景色

修改按钮背景色:   1.如果想在按钮上添加BMP图片,要设置按钮的属性为bitmap类型,这样按钮上就不能显示文字了,然后使用下面的代码,VC就是陷阱多  HBITMAP hb=L...
  • alphaxz1
  • alphaxz1
  • 2015年10月22日 11:09
  • 1466

Button形状和背景色的设置

很多人应该都发现过这样一个现象:当我们点击按钮时,按钮的背景色会加深或者变淡,这样做当然更方便我们确定是否点中了这个按钮。那么这样的效果是怎样实现的呢?——让我们来看看下面这个简单的例子吧。 1、在...
  • liujiaoruiIT
  • liujiaoruiIT
  • 2015年10月16日 11:43
  • 4150

改变Button的背景色

  HBRUSH   CControlDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)       {          ...
  • firy_lau1982
  • firy_lau1982
  • 2006年11月28日 16:00
  • 386

Android改变button背景色与获取button背景色

改变背景色 button.setBackgroundColor(int c); 获取背景色 Drawable background=button.getBackground(); ...
  • GISuuser
  • GISuuser
  • 2016年08月17日 14:35
  • 386

js实现点击按钮变换背景颜色

js实现点击按钮变换背景颜色 function aa(){ document.bgColor="Orange"; } function change(c){ document.b...
  • cherishSpring
  • cherishSpring
  • 2016年06月29日 23:51
  • 6495

怎么给button设置背景颜色?【Android】

怎么给button设置背景颜色?【Android】怎么给button设置背景颜色?【Android】 现在我想给按钮添加背景颜色,怎么做 1、android:background=”@androi...
  • yearHeaven
  • yearHeaven
  • 2016年12月11日 15:51
  • 2943

android点击Button后,buttton的背景和颜色改变

android点击Button后,buttton的背景和颜色改变
  • j451069001
  • j451069001
  • 2015年01月15日 20:35
  • 1022

多个button,改变选中button的背景颜色、字体颜色

上面是效果图 利用for循环创建5个button,其中对这个五个button一定要赋上tag值 ,因为下面的点击操作我们要用到; 看for循环的代码: for (int i=0; i ...
  • Secret_Frist
  • Secret_Frist
  • 2016年06月14日 10:17
  • 3113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:改变Push Button背景色
举报原因:
原因补充:

(最多只允许输入30个字)