.net WinForms应用程序中的自定义标题栏/浏览器

.net WinForms应用程序中的自定义标题栏/浏览器,.net,winforms,user-interface,windows-xp,.net,Winforms,User Interface,Windows Xp,我几乎可以肯定我知道这个问题的答案,但我希望我忽略了一些东西 即使在Windows XP上运行,某些应用程序的标题栏和按钮似乎也具有Vista Aero的外观。Google Chrome和Windows Live照片库就是一个例子。我知道从WinForms实现这一点的一种方法是创建一个无边框表单,自己绘制标题栏/按钮,然后覆盖WndProc,以确保移动、调整大小和按钮单击都能完成它们应该做的事情。我不清楚具体细节,但如果有一天阅读文档,可能会完成。我很好奇,是否有一个不同的,更容易的方式,我忽略

我几乎可以肯定我知道这个问题的答案,但我希望我忽略了一些东西

即使在Windows XP上运行,某些应用程序的标题栏和按钮似乎也具有Vista Aero的外观。Google Chrome和Windows Live照片库就是一个例子。我知道从WinForms实现这一点的一种方法是创建一个无边框表单,自己绘制标题栏/按钮,然后覆盖WndProc,以确保移动、调整大小和按钮单击都能完成它们应该做的事情。我不清楚具体细节,但如果有一天阅读文档,可能会完成。我很好奇,是否有一个不同的,更容易的方式,我忽略了。也许我忽略了一些API调用或窗口样式


我相信谷歌已经通过在Chrome上使用“滚动你自己的窗口”的方式为我解答了这个问题。如果有人有新的信息,我会把这个问题留待一天,但我相信我自己已经回答了这个问题。

不,恐怕没有其他简单的方法


你在正确的轨道上。您需要创建一个自定义Winform,然后按照本文所示进行操作。

Google Chrome使用Windows Vista SDK在XP上获得玻璃外观。你可以在这里下载:

使用此功能,您需要启用以下DLL的延迟加载,以在XP中获得玻璃效果:

uxtheme.dll dwmapi.dl @乔纳森·霍兰德:这是可以通过.NET实现的吗

是的,使用DllImport。这是一篇很好的博文

谷歌浏览器没有使用Vista SDK在XP上实现这一点。如果查看src\chrome\browser\views\frame,根据系统的功能,有几个文件可定义浏览器框架。在XP上,似乎使用了不透明框架;第19行这样说:

// OpaqueFrame
//
//  OpaqueFrame is a CustomFrameWindow subclass that in conjunction with
//  OpaqueNonClientView provides the window frame on Windows XP and on Windows
//  Vista when DWM desktop compositing is disabled. The window title and
//  borders are provided with bitmaps.
看起来它正在使用src\chrome\app\theme中的资源来绘制框架按钮

因此,我希望有一种廉价的方式在XP上实现Vista主题化的希望似乎破灭了。唯一的方法是手动绘制窗口的非客户端区域。我相信这可能是正确的做法,因为它让Windows处理非客户端的事情,比如移动和调整窗口大小


除非有人能找到在XP上神奇地启用Vista主题的方法,否则这就是问题的答案,但我显然无法将我自己的帖子标记为答案。

Owen,我在XP上使用Chrome,在Chrome窗口上看不到Vista Aero glass主题。我认为它是纯蓝色的


如果您想要自定义控件和窗口标题栏的主题,那么这是可以实现的。WinForms有一个优秀的免费UI工具包,它可以做到这一点:

这里有一篇文章,其中包含完整的代码示例,介绍如何在应用程序中使用您自己的自定义chrome:


这看起来真的很不错。该系列共有3篇文章,运行良好,在Vista上也是如此

不久前我自己发现了这个博客,但忘了把它添加到这个问题中。这是最接近这个问题的答案,如果没有完整的源代码示例,它最终会非常大。第一篇文章中解释的概念非常好。对于非.Net开发人员也很有用-我已经使用了这个方法,我可以告诉你这是一个很好的方法,但是它会给Vista带来问题,我认为程序员不会继续开发它,所以你可以找到一些bug。@user1306322这篇文章中的链接仍然是活动的。现在它开始工作了。以前有一些错误。谢谢你让我知道。不过,如果你复制一些核心摘录,以防将来无法获得,那就太酷了。一条后来证明与答案完全无关的评论如何获得相当高的投票率。这不是我问题的答案,这是错误的。见我9月4日的帖子;Google Chrome使用了一种类似于Chris Pietschmann指出的技术。