首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否有可能使静态控件透明?

是否有可能使静态控件透明?
EN

Stack Overflow用户
提问于 2012-12-07 01:08:54
回答 3查看 3.7K关注 0票数 4

我正在尝试实现一个静态控件,它可以刷新(更改文本)以响应某个事件,该事件每秒发生一次。因为我不想每秒绘制整个工作区,所以我决定使用静态控件,现在的问题是父窗口被换了皮,这意味着它有自定义的位图作为其背景,而静态控件不适合,所以我在寻找使静态控件的背景透明的方法。

这就是我现在所拥有的:

代码语言:javascript
代码运行次数:0
运行
复制
     hHandle = CreateWindowEx( WS_EX_TRANSPARENT, "STATIC", "", WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, 60, 212, 477, 20, hwnd, 0, hInstance, 0) ;


     case WM_CTLCOLORSTATIC: 
          {
              HDC hdC = (HDC)wParam;

              SetTextColor( hdC, RGB(31,122,179) );

              SetBkMode( hdC, TRANSPARENT );


              return 0;//(HRESULT)GetStockObject(NULL_BRUSH);
          }
          break;

我试图返回NULL画笔来绘制背景,希望它能使背景透明,但它没有更多地强迫静态控件不能正确地重新绘制,我的意思是文本被绘制在旧文本的顶部,所以一切都很混乱。

子类化是唯一的选择吗?

EN

回答 3

Stack Overflow用户

发布于 2012-12-07 04:05:22

我找到的唯一可靠的方法就是创建静态控件的子类,然后手动绘制背景。

WS_EX_TRANSPARENT不会使控件对底层像素真正透明(尽管它可能看起来像那样),并且WS_EX_COMPOSITED不能用于子窗口。

相反,将static子类化,并捕获WM_ERASEBKGND消息。然后,您可以绘制基础位图的适当部分。

票数 3
EN

Stack Overflow用户

发布于 2015-08-11 00:19:19

根据我的理解,让WC_STATIC控件只以您选择的颜色(在图像或其他表面上)显示文本的方法是返回。这就是这个link对我起作用的地方。

代码语言:javascript
代码运行次数:0
运行
复制
case WM_CTLCOLORSTATIC:
   SetTextColor((HDC)wParam, RGB(255, 0, 0));
   SetBkMode((HDC)wParam, TRANSPARENT);

   // the correct return needs HOLLOW_BRUSH
   return (LRESULT)GetStockObject(HOLLOW_BRUSH);
break;
票数 2
EN

Stack Overflow用户

发布于 2012-12-07 01:28:04

您没有提到静态控件上的窗口样式,特别是扩展样式WS_EX_TRANSPARENT似乎旨在解决您在重绘中描述的问题。另外,据我所知,WS_EX_COMPOSITED在您的上下文中可能很有用。

您还可以考虑背景窗口是否应设置WS_CLIPCHILDREN,因为这可能会影响重绘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13748831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档