使用MFC在OnCtlColor里面对button进行了背景颜色设置,但没反应,向大神求解

tanyufeng_521 2013-08-15 03:24:45
我的窗口贴有背景图片,现在想修改对话框上button的背景颜色,但感觉没有反应,大家帮帮忙看看

HBRUSH CMamaDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(nCtlColor)
{
case CTLCOLOR_STATIC:
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
case CTLCOLOR_BTN:
pDC->SetBkColor(RGB(0,0,0));
pDC->SetTextColor(RGB(255,255,255));
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
}
return hbr;
}
...全文
611 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-09-18
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
_船长_ 2013-09-18
  • 打赏
  • 举报
回复
可以使用MFC中的CBitmapButton类,同时设置一下按钮控件的owner draw属性为true就行
schlafenhamster 2013-08-16
  • 打赏
  • 举报
回复
CStatic 发的
tanyufeng_521 2013-08-16
  • 打赏
  • 举报
回复
quote]“case CTLCOLOR_BTN:”
Button 现在 不发送 这个消息 了。[[/quote]
好像不只是Button不发送这个消息,好像很多控件都不发送这个消息了,我昨天试了CStatic好像也不是发送这个消息的
tanyufeng_521 2013-08-16
  • 打赏
  • 举报
回复
引用
比起顶楼的一两句代码,3L的确实难度大点也复杂点,但一个按钮不管有多炫多酷,3L的方法都能做出来,顶楼的代码就只能在一边看了

确实是的,3L的方法可以实现很多Button的样式,我的那种方法只能是简单的一点应用,而且好像现在还不可以了
schlafenhamster 2013-08-15
  • 打赏
  • 举报
回复
“case CTLCOLOR_BTN:” Button 现在 不发送 这个消息 了。
zhousitiaoda 2013-08-15
  • 打赏
  • 举报
回复
比起顶楼的一两句代码,3L的确实难度大点也复杂点,但一个按钮不管有多炫多酷,3L的方法都能做出来,顶楼的代码就只能在一边看了
tanyufeng_521 2013-08-15
  • 打赏
  • 举报
回复
呵呵,这看来有点难度呀
zhuben775 2013-08-15
  • 打赏
  • 举报
回复

void MyImageButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
	CDC*	pDC = CDC::FromHandle(lpDIS->hDC);
	CRect _rt;
	this->GetClientRect(_rt);

	CDC dcBuffer;//后台缓存
	dcBuffer.CreateCompatibleDC(pDC);
	CBitmap dfbmp;//设置后台缓存大小
	dfbmp.CreateCompatibleBitmap(pDC,_rt.right,_rt.bottom);
	dcBuffer.SelectObject(&dfbmp);
	dcBuffer.FillRect(&_rt, &CBrush(m_clrTransparent));
	dcBuffer.SetBkMode(TRANSPARENT);

	if (!m_pImage->IsNull())
	{
		m_pImage->Draw(dcBuffer.m_hDC, _rt.left, _rt.top, _rt.right, _rt.bottom,
			m_nState * m_rtImageRect.right, 0, m_rtImageRect.right, m_rtImageRect.bottom);
	}

	pDC->TransparentBlt(0,0,_rt.right,_rt.bottom,&dcBuffer,0,0,_rt.right,_rt.bottom,m_clrTransparent);//将后台缓冲COPY到前台
}
tanyufeng_521 2013-08-15
  • 打赏
  • 举报
回复
我试试,在DrawItem里面也是一样的设置吗??
zhousitiaoda 2013-08-15
  • 打赏
  • 举报
回复
按钮这样好像是行不通的,记不太清了。要不派生重写DrawItem吧

15,979

社区成员

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

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