c语言vc怎么改变背景板颜色,vc 怎么改变按钮的背景颜色

C/C++ codevoid GYBitmapButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)

{

ASSERT(lpDIS != NULL);

if (m_hSkinBitmap != NULL)

{

HDC hdcBmpMem = NULL;

HBITMAP hbmOldBmp = NULL;

HDC hdcPaint = NULL;

int iBtnWidth = 0;

BITMAP bminfo;

CRect rect;

hdcPaint = lpDIS->hDC;

rect = lpDIS->rcItem;

hdcBmpMem = ::CreateCompatibleDC(hdcPaint);

hbmOldBmp = (HBITMAP)::SelectObject(hdcBmpMem, m_hSkinBitmap);

GetObject(m_hSkinBitmap, sizeof(bminfo), &bminfo);

iBtnWidth = bminfo.bmWidth / 4;

UINT state = lpDIS->itemState;

int x = 0;

if (state & ODS_SELECTED)

x = 1;

// else if (state & ODS_FOCUS)

// x = 2; // third image for focused

else if (state & ODS_DISABLED)

x = 3; // last image for disabled

::BitBlt(hdcPaint, rect.left, rect.top, rect.Width(), rect.Height(),

hdcBmpMem, iBtnWidth*x, 0, SRCCOPY);

::SelectObject(hdcBmpMem, hbmOldBmp);

::DeleteDC(hdcBmpMem);

}

else

{

CRect rect;

rect.CopyRect(&lpDIS->rcItem);

COLORREF cr = RGB(129, 129, 129);

COLORREF crTopLeft = RGB(255, 255, 255);

COLORREF crBottomRight = RGB(0, 0, 0);

UINT state = lpDIS->itemState;

if (state & ODS_SELECTED)

{

crTopLeft = RGB(0, 0, 0);

crBottomRight = RGB(255, 255, 255);

}

CDC* pDC = CDC::FromHandle(lpDIS->hDC);

pDC->FillSolidRect(&rect, cr);

rect.DeflateRect(1,1);

pDC->Draw3dRect(&rect, crTopLeft, crBottomRight);

CString s;

GetWindowText(s);

pDC->DrawText(s, &rect, DT_CENTER | DT_SINGLELINE);

}

}

------解决方案--------------------

重载drawitem

用位图贴上去,或者用画刷

------解决方案--------------------探讨

有一个叫BCGCTROL的插件,直接集成到VC中的,很好用,可以试试。

------解决方案--------------------

搜CHoverButton吧, 里面就有DrawItem的用法。

------解决方案--------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值