首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置窗口区域而不禁用主题

设置窗口区域而不禁用主题
EN

Stack Overflow用户
提问于 2011-06-11 01:29:56
回答 1查看 921关注 0票数 11

是否有人知道如何分配窗口区域(SetWindowRgn或WinForms中的Control.Region ),而不破坏非客户端区域的主题化?

例如,运行以下命令会生成Windows 2000风格的非主题标题栏、边框等:

代码语言:javascript
复制
var form = new Form { Width=500, Height=500, BackColor = Color.Azure };
form.Text = "But soft, what light through yonder window breaks?";
var region = new Region (new Rectangle (Point.Empty, form.Size));
region.Exclude (new Rectangle (100, 100, 300, 300));
form.Region = region;
form.ShowDialog();

我猜这与这篇MSDN文章有关,它说:

只要一个窗口有一个非空区域(SetWindowRgn),UxTheme管理器就会假设这是一个专门的窗口,并且该窗口不会使用视觉样式。

...hence UxThemes假设它是一个专门的窗口。有没有一种方法可以让UxTheme管理器显式地以窗口为主题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-16 02:03:44

你的问题的答案是你不能。

但是,为了在表单中给出一个透明的部分,解决办法是将WS_EX_LAYERED扩展窗口样式添加到表单中。然后,您可以告诉窗口管理器,您希望使用色度键使窗体的一部分透明:

代码语言:javascript
复制
SetLayeredWindowAttributes(
      Form.Handle, //  __in  HWND hwnd,
      RGB(0, 255, 0), //green is the color key     __in  COLORREF crKey,
      255, //window is opaque otherwise  __in  BYTE bAlpha,
      LWA_COLORKEY //use color-key (rather than per-pixel alpha)  __in  DWORD dwFlags
);

然后,你可以把你的“透明”区域作为石灰绿色:

然后在运行时是透明的:

更新:当我使用分层窗口具有完全透明的鼠标事件时,会缓慢地传输到下面的内容。注意“旗帜”图标突出显示:

另请参阅

  • Window Overview -> Window Features -> Layered Windows
  • SetLayeredWindowAttributes函数
  • 扩展窗口样式
  • 分层窗口
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6313510

复制
相关文章

相似问题

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