如何使Static背景透明,但是文字不透明?

小行星X 2003-10-27 05:16:12
当一个Dlg不是一种颜色时,如何消掉Static的背景只留下文字?

看到一篇帖子这么写:

CStatic m_s; // 一个Static控件的变量

CRect rect;
s.GetWindowRect( rect );
ScreenToClient( rect );
InvalidateRect( rect, TRUE );

但我试了,这样不行,该怎么办?谢谢!
...全文
415 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
王国凡 2004-01-16
  • 打赏
  • 举报
回复
这只是让 Static 标签的背景和 Window 的背景色相同,Static 背景仍然不是透明的。
HuWenjin 2003-10-28
  • 打赏
  • 举报
回复
void CDialogEx::CDialogEx
{
m_hBkBrush = CreateSolidBrush(0x777777);
}


HBRUSH CDialogEx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor)
{
case CTLCOLOR_MSGBOX:
case CTLCOLOR_BTN:
case CTLCOLOR_DLG:
case CTLCOLOR_SCROLLBAR:
case CTLCOLOR_STATIC:
pDC->SetBkMode(TRANSPARENT); <--- 请注意该句
return (HBRUSH) m_hBkBrush;
case CTLCOLOR_EDIT:
case CTLCOLOR_LISTBOX:
default:
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
}
tonybaobao 2003-10-27
  • 打赏
  • 举报
回复
子类化CStatic类,派生出自己的CXXXStatic类。然后重载OnPaint,在里面调用SetBkMode(TRANSPARENT);
小行星X 2003-10-27
  • 打赏
  • 举报
回复
这样不行,返回的hbr仍然遮挡了Dlg的颜色
flyelf 2003-10-27
  • 打赏
  • 举报
回复
在对话框的OnCtlColor中对static进行设置背景模式TRANSPARENT
pDC->SetBkMode(TRANSPARENT);
小行星X 2003-10-27
  • 打赏
  • 举报
回复
应该是

m_s.GetWindowRect( rect )

笔误

15,979

社区成员

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

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