如何将Radio Button (单选按钮)设置背景透明

xljcn 2008-11-04 02:28:13
HBRUSH dlgExamlog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
if(pWnd->GetDlgCtrlID()==IDC_RADIO1)
{
m_brush.CreateStockObject(HOLLOW_BRUSH);
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,255,0));
return m_brush;
}
return hbr;
}

头文件中定义了 CBrush m_brush;

上面这么写但是单选按钮不能设置为透明,请教高手!急
...全文
1432 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
MingoJ 2012-07-26
  • 打赏
  • 举报
回复
都是些乱喷喷, 没个靠谱的
hideforever 2012-01-14
  • 打赏
  • 举报
回复
Radio button的背景透明:使用OnCtlColor中返回空画刷的方法 在VC里面可以,但是VS2008就不起作用了
liuy_yy 2012-01-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hideforever 的回复:]
Radio button的背景透明:使用OnCtlColor中返回空画刷的方法 在VC里面可以,但是VS2008就不起作用了
[/Quote]
我用的是2008,用OnCtlColor返回空画刷的方法可以使radio控件背景透明(我在OnEraseBkgnd里面贴背景的),但是不能修改radio控件的字体颜色。
a3155792 2011-09-29
  • 打赏
  • 举报
回复
我现在正碰到你们这个问题,搞了半天还是没有解决。。请教高手啊!
aled6825 2011-07-10
  • 打赏
  • 举报
回复
我也遇到这个问题了
字符集确实影响了它的显示

这是MFC的bug么?
tainlooey 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 xljcn 的回复:]
HBRUSH dlgExamlog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
if(pWnd->GetDlgCtrlID()==IDC_RADIO1)
{
m_brush.Crea……
[/Quote]

你确定你创建的按钮的ID时 IDC_RADIO1吗?
这段程序应该是完全没问题的.
wxinstudent 2011-06-26
  • 打赏
  • 举报
回复
字符集的问题,将unicode改为多字节字符集
cnzdgs 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xljcn 的回复:]
谢谢各位,各位的方法我都已经试过了,行不通,因为我已经用OnPaint函数给对话框加了个背景图,单选按钮按以上的方法设置透明结果都是按钮的背景为黑色的了!等待搞定给分!
[/Quote]
我提的方法你试过了?代码怎么写的?
xljcn 2008-11-05
  • 打赏
  • 举报
回复
TO:laililing m_hBkBrush ,m_bEraseFullBkGND, m_hDlgBrush 这三个变量如何声明?怎么返回时突然冒出m_hDlgBrush这个变量?
xljcn 2008-11-05
  • 打赏
  • 举报
回复
谢谢各位,各位的方法我都已经试过了,行不通,因为我已经用OnPaint函数给对话框加了个背景图,单选按钮按以上的方法设置透明结果都是按钮的背景为黑色的了!等待搞定给分!
lilin_820503 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xljcn 的回复:]
谢谢各位,各位的方法我都已经试过了,行不通,因为我已经用OnPaint函数给对话框加了个背景图,单选按钮按以上的方法设置透明结果都是按钮的背景为黑色的了!等待搞定给分!
[/Quote]

你的代码是怎么写的啊,我也是在onpaint里画了个背景图,然后设置了一下就是透明的了,如果背景是黑色的,是不是你自己设置的啊,它默认的背景也不是黑色的啊。还是和程序其他部分有关啊。
lilin_820503 2008-11-04
  • 打赏
  • 举报
回复
重载OnEraseBkgnd函数,把return CDialog::OnEraseBkgnd(pDC);注释掉,改成return TRUE;就可以了。

ps:如果消息响应里没有WM_ERASEBKGND,则在View-》ClassWizard的ClassInfo 标签中,在Messager Filter中选中Child Windows选项,就会有这个消息映射了。
Kudeet 2008-11-04
  • 打赏
  • 举报
回复
在对话框的WM_CTLCOLOR消息响应函数中返回了一个空画刷,然后设置背景模式为透明就达到了目的。


响应 WM_CTRLCOLOR 消息

创建一个空画刷
m_hBkBrush = (HBRUSH)::GetStockObject(NULL_BRUSH); //创建一个空画刷,使控件背景透明

类似下面的代码加入
HBRUSH CJinDlgSkin::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
{
m_bEraseFullBkGND = TRUE;
switch (nCtlColor)
{
case CTLCOLOR_MSGBOX:
case CTLCOLOR_BTN:
case CTLCOLOR_SCROLLBAR:
case CTLCOLOR_STATIC:
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH) m_hBkBrush;
case CTLCOLOR_DLG:
case CTLCOLOR_EDIT:
case CTLCOLOR_LISTBOX:
case CTLCOLOR_MAX:
default:
return m_hDlgBrush;
}
}

记得程序结束要DELETE
Kudeet 2008-11-04
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20010322/15/87597.html
cnzdgs 2008-11-04
  • 打赏
  • 举报
回复
要设置BS_OWNERDRAW风格,响应WM_DRAWITEM消息自绘。

15,979

社区成员

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

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