【发布时间】:2011-09-12 21:35:09
【问题描述】:
有谁知道如何分配一个窗口区域(SetWindowRgn 或 WinForms 中的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();
我猜这与this MSDN article 说:
只要一个窗口有一个非NULL 应用到它的区域(SetWindowRgn), UxTheme 管理器假定这 是一个专门的窗口和窗口 不会使用视觉样式。
...因此 UxThemes 假定它是一个专门的窗口。有没有办法明确告诉 UxTheme 管理器为窗口设置主题?
【问题讨论】:
-
这只是一个随机的想法,我对表单应用程序很生疏 - 但是如果你将一个容器放在停靠在所有 4 个侧面的表单中,然后将所有其他控件放在其中,那么设置容器区域而不是表单区域,让表单父区域不受影响?
-
@Greebo:这将导致表单通过“孔”而不是其他窗口显示。
-
啊——我确实说过我生锈了;)