微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

有没有人知道如何分配一个窗口区域(WinForms中的SetwindowRgn或Control.Region )而不杀死在非客户区域的主题

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

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文章说:

只要一个窗口应用了一个非NULL区域(SetwindowRgn),UxTheme Manager假定这是一个专门的窗口,窗口将不会使用视觉样式。

为什么FindNextFile在Windows 7上失败

尝试挂钩到MessageBeep系统API

如何解决挂在CoUnitialize()上的进程?

从安全的angular度来看,pipe道是否被认为是危险的?

找出哪些显示驱动器当前正在运行

因此,UxThemes认为这是一个专门的窗口。 有没有办法明确告诉UxTheme Manager来主题窗口?

由于发现Windows.h的问题,无法设置openGL superBible的例子

Windows资源pipe理器备用数据streamshell扩展

WinZip是否有环境variables或等价物?

如何在WaitForSingleObject()上等待stdin的CancelSynchronousIo()?

Windows 7 / Vista进程pipe理 – 如何在长时间空闲时间后启动外部程序?

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

但是一个解决方法,在窗体中给你一个透明部分,就是将WS_EX_layered扩展窗口样式添加到窗体中。 然后,您可以告诉窗口管理器您想要使用色度键来使表单的一部分透明:

SetlayeredWindowAttributes( Form.Handle,// __in HWND hwnd,RGB(0,255,0),//green is the color key __in COLORREF crKey,//window is opaque otherwise __in BYTE bAlpha,LWA_COLORKEY //use color-key (rather than per-pixel alpha) __in DWORD dwFlags );

然后你可以把你的“透明”区域变成柠檬绿:

然后在运行时将是透明的:

更新:当我使用分层窗口有完全透明鼠标事件时,滴入到底下是什么。 注意“标志”图标突出显示

也可以看看

窗口概览 – >窗口功能 – >分层窗口

SetlayeredWindowAttributes函数

扩展窗口样式

分层的Windows

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐