繁体   English   中英

如何在不使用AllowTransparency的情况下删除WPF窗口的非工作区

[英]How to remove the non client area of a WPF window without using AllowTransparency

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

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

提前致谢。

编辑:我发现是什么原因导致黑色边缘,它们是后面的窗口。 现在看来问题出在窗口的根元素没有占据整个窗口。 当我将其边距设置为负值时,它会绘制在黑色区域上。 显然,布局过程可以,并且所需的大小与窗口相同,但是渲染大小不同。

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

我想让根元素占据整个窗口,以消除黑色窗口背景,或者启用无厚框架的本机调整大小功能。

谢谢。

我找到了该黑色区域的原因。 看来我在使用的代码是由其他人制作的,它以某种方式弄乱了框架的布局传递,从而导致了黑区,并因此破坏了根元素的正确大小。 我在另一个项目中处理了WM_NCCALCSIZE,它的工作就像一个魅力。

毕竟,尽管我找到了一种闲置的方式来创建具有所有原始窗口功能的自定义窗口,但我还是决定使用Microsoft必须提供的标准窗口,以便我的程序将来与Windows兼容。

如果有人想要该代码或WPF窗口自定义方面的帮助,他们可以在此处评论,而我将提供帮助,以便至少我所有的研究都不会徒劳。

谢谢阅读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM