如何在不使用AllowTransparency的情况下删除WPF窗口的非客户区域

时间:2010-07-15 09:23:05

标签: c# .net-3.5

我想从WPF自定义窗口中删除调整大小边框。 我已经发现我必须处理WM_NCCALCSIZE消息并返回0。 这将删除边框并将窗口与窗口的左上角对齐。 问题是通过这样做,客户端区域增加而WPF根控制没有。 这会在窗口的左侧和底部产生黑色边缘,我想摆脱它。

我正在使用VS2010 C#Windows XP,并希望在Windows XP和Windows 7下都可以使用。

先谢谢。

编辑: 我发现是什么原因导致了黑色边缘,它们是落后的窗口。 现在似乎问题是窗口的根元素不占用整个窗口。当我将其边距设置为负值时,它会覆盖黑色区域。显然布局传递正常,所需的大小与窗口相同,但渲染大小不同。

我还发现可以通过从窗口样式中删除WS_THICKFRAME来解决整个问题。问题是仅在使用WS_THICKFRAME时启用的调整大小功能。我正在使用WM_NCHITTEST进行调整大小,如果窗口知道它没有调整大小边框,它将关闭其调整大小功能。

我想让根元素占据整个窗口以消除黑色窗口背景,或者在没有粗框的情况下启用原生调整大小功能。

感谢。

1 个答案:

答案 0 :(得分:0)

我找到了黑色区域的原因。 似乎我正在使用的其他人制作的代码通过某种方式搞乱了框架的布局传递以及根元素的正确大小而导致黑色区域。 我在另一个项目中处理了WM_NCCALCSIZE,它就像一个魅力。

毕竟,虽然我找到了创建具有所有原始窗口功能的自定义窗口的空闲方式,但我决定使用Microsoft提供的标准窗口,以便我的程序将来可以与Windows兼容。

如果有人想要代码或帮助WPF窗口自定义,他们可以在这里发表评论,我会帮助,以便至少我的所有研究都不会白费。

感谢阅读。