vc 如何改变按钮的背景颜色

orcd 2010-06-08 06:25:16
从网上找到的
DrawItem 里写的代码
UINT uStyle = DFCS_BUTTONPUSH;

// This code only works with buttons.
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);

// If drawing selected, add the pushed style to DrawFrameControl.
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;

// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,
DFC_BUTTON, uStyle);

// Get the button's text.
CString strText;
GetWindowText(strText);

// Draw the button text using the text color red.
COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));
::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
::SetTextColor(lpDrawItemStruct->hDC, crOldColor);






这样只能改变字体的颜色,但我想改变的是按钮的颜色

不想用其他现有的类,有没有方法
...全文
1047 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dragon000000 2012-10-30
  • 打赏
  • 举报
回复
按钮这个东西不太好处理。
已经两天了,还是没有一个好的结果。
郁闷
youlianqi1 2010-06-17
  • 打赏
  • 举报
回复
http://download.csdn.net/source/2424244
VC按钮代码包
向立天 2010-06-17
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
j8daxue 2010-06-17
  • 打赏
  • 举报
回复
只要改变颜色的话,CTLCOLOR处理就可以了
wolfmvp 2010-06-09
  • 打赏
  • 举报
回复
貌似在按钮上加载位图是最省事的一种办法,建议试试…
muzizongheng 2010-06-09
  • 打赏
  • 举报
回复
搜CHoverButton吧, 里面就有DrawItem的用法。
shexinwei 2010-06-09
  • 打赏
  • 举报
回复
CDC::FillSolidRect();
x___f__ 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lovechinaloveme 的回复:]
有一个叫BCGCTROL的插件,直接集成到VC中的,很好用,可以试试。
[/Quote]
听说这个东西很好用,楼主不妨试试,它也是继承MFC的。
hnxtwf 2010-06-08
  • 打赏
  • 举报
回复
重载drawitem
用位图贴上去,或者用画刷
vann1982 2010-06-08
  • 打赏
  • 举报
回复
看看这个按钮类的实现,我用过还可以 cr 就是按键颜色



void 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);
}
}


orcd 2010-06-08
  • 打赏
  • 举报
回复
我只是想改变它的背景色。网上的比较麻烦,都是写了很大的类。
lovechinaloveme 2010-06-08
  • 打赏
  • 举报
回复
有一个叫BCGCTROL的插件,直接集成到VC中的,很好用,可以试试。
yueran5528 2010-06-08
  • 打赏
  • 举报
回复
我以前用过一个偷懒的办法,给按钮加载位图,嘿嘿。不过具体代码忘了,网上应该很多,搜搜!
orcd 2010-06-08
  • 打赏
  • 举报
回复
谁知道有没有办法实现啊

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧