如何在不使用AllowTransparency的情况下删除WPF窗口的非客户区
我想从我的WPF自定义窗口中删除调整大小的边框。 我已经发现我必须处理WM_NCCALCSIZE消息并返回0.这将删除边框并将窗口与窗口的左上角对齐。 问题是,通过这样做,客户区域增加并且WPF根控件不会。 这会在窗口的左侧和底侧产生我想摆脱的黑色边缘。
我使用的是VS2010 C#Windows XP,并希望在Windows XP和Windows 7下都能正常工作。
提前致谢。
编辑:我发现什么是造成黑色边缘,他们是背后的窗口。 现在看来问题在于窗口的根元素不占用整个窗口。 当我将其边距设置为负值时,会画出黑色区域。 显然布局过程是可以的,所需的大小与窗口相同,但渲染大小不同。
我还发现,通过从窗口样式中删除WS_THICKFRAME可以解决整个问题。 与此相关的问题是仅在使用WS_THICKFRAME时启用的调整大小功能。 我使用WM_NCHITTEST来进行大小调整,如果窗口知道它没有调整大小的边框,它将关闭其调整大小的功能。
我想使根元素占据整个窗口以消除黑色窗口背景,或者在没有粗框的情况下启用原生调整大小功能。
谢谢。
我找到了黑色区域的原因。 看起来,我使用的是其他人制作的代码,通过某种方式导致黑色区域与框架的布局传递相混淆,从而导致了根元素的正确大小。 我在另一个项目中处理了WM_NCCALCSIZE,它像魅力一样工作。
毕竟,尽管我发现了创建具有所有原始窗口功能的自定义窗口的空闲方式,但我决定使用Microsoft提供的标准窗口,以便我的程序将来可以与Windows兼容。
如果有人想要代码或帮助WPF窗口定制,他们可以在这里发表评论,我会帮助,至少我所有的研究都不会徒劳。
谢谢阅读。
链接地址: http://www.djcxy.com/p/25901.html上一篇: How to remove the non client area of a WPF window without using AllowTransparency