Checkbox 背景透明

ruanwenzhongf 2012-10-23 04:24:21
我想把Checkbox的背景弄成透明的,因为我的对话框是设置了背景图片了。其他控件都好弄,可是就是不知道怎么弄checkbox的背景。我想弄成的效果是:checkbox上的字感觉是写在对话框上的。而不是现在这种:字后面一块背景色。
...全文
626 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruanwenzhongf 2012-10-29
  • 打赏
  • 举报
回复
非常感谢大家的积极帮助,
我是用对话框的背景色去填充Check的背景色。
上面也提到了很多方法,值得学习!
yht7905907 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 14 楼 lfs09 的回复:
背景是图片呢.

的确,如果是图片,if(nCtlColor == CTLCOLOR_BTN)这个判断都不进入。
我已经改进了,两种解决透明的方式:参考此程序
http://download.csdn.net/detail/zhoujielunzhimi/4687178
[/Quote]
感谢,知道该怎么做了。
代码:
HBRUSH CMFCTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: 在此更改 DC 的任何属性
switch (pWnd->GetDlgCtrlID())
{
//针对ID为IDC_CTL1、IDC_CTL2和IDC_CTL3的控件进行同样的设置
case IDC_CHECK1:
pDC->SetBkMode(TRANSPARENT);
/*添加部分*/
CRect rc;
pWnd->GetWindowRect(&rc);
ScreenToClient(&rc);

CDC* dc = GetDC();

pDC->BitBlt(0,0,rc.Width(),rc.Height(),dc,rc.left,rc.top,SRCCOPY); //把父窗口背景图片先画到按钮上

ReleaseDC(dc);
/*添加部分*/
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
yht7905907 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

OnCtlColor()里面
if(nCtlColor == CTLCOLOR_BTN)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
经过验证,确实可行。
[/Quote]
我也像你这么做过,为啥我就不行呢。麻烦你整个简单小例子发我邮箱我看看 707159146@qq.com 谢谢
yht7905907 2012-10-25
  • 打赏
  • 举报
回复
前几天也遇到这个问题。
建议你的背景图片弄成一种颜色,因为checkbox的背景色除了透明,其他的颜色都能设置。使用2楼的方法变颜色就可以。如果像1楼说的那样,你还得响应点击static的消息。随便说说!
你妹的特盗不 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

把checkbox的字段名字弄空,自己附加透明的static到旁边。

就把字后面的透明模块给解决了
[/Quote]
高.
sumos 2012-10-25
  • 打赏
  • 举报
回复
OnCtlColor()里面
if(nCtlColor == CTLCOLOR_BTN)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
经过验证,确实可行。
sumos 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lfs09 的回复:]
背景是图片呢.
[/Quote]
的确,如果是图片,if(nCtlColor == CTLCOLOR_BTN)这个判断都不进入。
我已经改进了,两种解决透明的方式:参考此程序
http://download.csdn.net/detail/zhoujielunzhimi/4687178
你妹的特盗不 2012-10-25
  • 打赏
  • 举报
回复
背景是图片呢.
yht7905907 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

http://blog.csdn.net/zhoujielunzhimi/article/details/8111120
补上,这是我测试的结果。
[/Quote]
可以做一个资源吗,明天我下载看下。 我照你的方法怎么就不行呢。
sumos 2012-10-25
  • 打赏
  • 举报
回复
华美乐章 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
OnCtlColor()里面
if(nCtlColor == CTLCOLOR_BTN)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
经过验证,确实可行。
[/Quote]

这个对单选框确实没作用..1楼的方法可以
Eleven 2012-10-23
  • 打赏
  • 举报
回复
WM_CTLCOLOR消息里SetBkMode(TRANSPARENT)
gfm688 2012-10-23
  • 打赏
  • 举报
回复
最好的方法是在WM_CTLCOLORSTATIC里返回一个位图刷子,返回空刷会有问题的
荔-枝-lin 2012-10-23
  • 打赏
  • 举报
回复
写一个Checkbox类,在OnEraseBkgnd里面获取窗口背景然后OnPaint绘制就ok了
luoyz520 2012-10-23
  • 打赏
  • 举报
回复
CTLCOLOR_LISTBOX 改为 CTLCOLOR_BTN
luoyz520 2012-10-23
  • 打赏
  • 举报
回复
OnCtlColor()里面

if(nCtlColor == CTLCOLOR_LISTBOX)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
傻X 2012-10-23
  • 打赏
  • 举报
回复
把checkbox的字段名字弄空,自己附加透明的static到旁边。

就把字后面的透明模块给解决了

15,979

社区成员

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

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