在Windows中覆盖非客户端窗口样式

时间:2010-11-06 13:14:08

标签: wpf winforms

我注意到越来越多的Windows应用程序没有通常的非客户端窗口边框和最大化/最小化/关闭按钮。示例包括Zune播放器软件和MetroTwit Twitter客户端应用程序。

我的问题是:如何在不借助原生API编码的情况下做到这一点?是否可以使用.Net(通过覆盖Form.OnPaint?)或WPF创建此类应用程序?

欢迎提出建议和/或示例代码段。

2 个答案:

答案 0 :(得分:2)

他们都使用相同的方法,他们只是创建一个没有边框和标题栏的窗口。然后绘制自己的样式,按照他们想要的方式设计。很容易辨别,右上角的关闭按钮总是微妙地关闭。当然有时是故意的。

执行此操作不需要本机API编码。但是,当您省略标题栏和可调整大小的边框时,重写WndProc()可以很方便地恢复一些丢失的功能。谷歌WM_NCHITTEST找到示例代码,这里也有很多。

一般情况下,请注意这样做。这些自定义样式的窗口通常在GUI Blooper列表中有特色。 This one是我最喜欢的例子。在同一页面上,this one是一个经典陷阱。

答案 1 :(得分:0)

这在.Net中很容易做到(不了解WPF)。这是一个代码示例:

custom dialog with a text field in winmobile

它适用于.Net CF,但它可以在WinForms应用程序中正常工作 - 唯一的区别是边框样式属性在一个中被称为BorderStyle而在另一个中被称为FormBorderStyle