在WinForms应用程序中自定义标题栏/ chrome

我几乎肯定我知道这个问题的答案,但我希望有一些我忽略了。

即使在Windows XP上运行,某些应用程序似乎也具有Vista Aero的外观和感觉。 (谷歌浏览器和Windows Live照片画廊想到的例子。)我知道一个方法来完成从WinForms这将是创build一个无边界的forms,并自己绘制标题栏/button,然后覆盖WndProc ,以确保移动,resize,button点击做他们应该做的事情(我不清楚的具体事情,但可能会拉下来,给一天阅读文件。)我很好奇,如果有一个不同的,更简单的方法,我远眺。 也许我忽略了一些API调用或窗口样式?

我相信Google已经通过使用Chrome浏览器自带的窗口方式为我解答了这个问题。 如果有人有新的信息,我会把这个问题留待今天,但我相信我自己已经回答了这个问题。

这里有一个完整的代码示例如何使用自己的自定义“铬”的应用程序的文章:

http://geekswithblogs.net/kobush/articles/CustomBorderForms3.aspx

这看起来像一些非常好的东西。 这个系列共有3篇文章,运行良好,Vista也是!

Google Chrome并没有使用Vista SDK来实现XP。 如果您查看src\chrome\browser\views\frame ,有几个文件根据系统的function来定义浏览器框架。 在XP上,它看起来像使用OpaqueFrame ; 第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的资源来绘制框架button。

所以看起来像我的希望,有一种廉价的方式来使XP上的Vista主题破灭。 唯一的方法就是手动绘制窗口的非客户区域。 我相信像这样的东西可能是正确的轨道,因为它让Windows处理非客户端的东西,如移动和调整窗口的大小。

除非有人可以find一种方法来魔法启用XP上的Vista主题,这是问题的答案,但我显然不能标记自己的post作为答案。

欧文,我在XP上使用Chrome,在Chrome窗口中没有看到“Vista Aero”玻璃主题。 我认为它是坚实的蓝色。

如果是自定义主题的控件和窗口标题栏,你可以完成。 有一个非常好的免费的用于WinForms的用户界面工具包,它完全符合: KryptonToolkit

@Jonathan Holland:这是可以从.NET完成的吗?

是的,使用DllImport。 这是一个很好的博客文章

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

http://www.microsoft.com/downloads/details.aspx?FamilyID=4377f86d-c913-4b5c-b87e-ef72e5b4e065&displaylang=en

使用这个,你需要启用延迟加载下面的DLL来获得玻璃效果在XP中:

  • 的uxtheme.dll
  • dwmapi.dl

不,恐怕没有其他简单的方法来做到这一点。

你在正确的轨道上。 您将需要创build一个自定义Winform,然后按照此示例中所示进行操作。