WIN32 button背景色问题

经多方尝试,在使用c++开发windows应用程序中(不使用mfc,单纯用win32 api),想要改变按钮的背景色是一个很蛋疼的问题。

查询了msdn,找到如下说明:

在绘制按钮之前,会将 WM _ CTLCOLORBTN 消息发送到按钮的父窗口。 父窗口可以更改按钮的文本和背景色。 但是,仅所有者描述的按钮会响应处理此消息的父窗口。

仅所有者描述的按钮就是自绘按钮,如果不是自绘按钮则这个消息没啥用。但我创建自绘按钮了还需要用这个消息么??自己写代码绘制就行了。

网上查到的背景色修改代码:

case WM_CTLCOLORBTN:
                if((HWND)lParam==hwndBtn&&wParam==1)
                {
                    HWND hbn = (HWND)lParam;
		            HDC hdc = (HDC)wParam;
		            RECT rc;
		            TCHAR text[64];

	            	GetWindowText(hbn, text, 63);
	            	GetClientRect(hbn, &rc);
	            	SetTextColor(hdc, RGB(0, 0, 0));
	            	SetBkMode(hdc, TRANSPARENT);
		            DrawText(hdc, text, _tcslen(text), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
                    return (INT_PTR)CreateSolidBrush(RGB(0, 0, 255));
                }
                break;

其原理就是带BS_OWNERDRAW样式的按钮绘制前会向父窗口发送WM _ CTLCOLORBTN消息,在响应此消息时将自定义的画刷当做返回值返回应用程序,也即是其父窗口,父窗口会使用此画刷来绘制按钮背景,很不好用。

建议使用自绘按钮来实现相关功能。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值