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

时间:2020-03-05 18:47:15  来源:igfitidea点击:

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

即使在Windows XP上运行,某些应用程序的标题栏和按钮似乎也具有Vista Aero的外观。 (以谷歌浏览器和Windows Live Photo Gallery为例。)我知道从WinForms实现此目的的一种方法是创建一个无边界表单并自己绘制标题栏/按钮,然后覆盖" WndProc"以确保移动,调整大小和单击按钮可以完成他们应该做的事情(我不清楚具体细节,但可能有一天可以阅读文档。)我很好奇我是否有其他更简单的方法俯瞰。也许我忽略了一些API调用或者窗口样式?

我相信Google已通过在Chrome中使用"自行滚动窗口"方法为我解决了这一问题。万一有人有新信息,我将把问题再开放一天,但我相信我自己已经回答了这个问题。

解决方案

回答

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

我们走在正确的轨道上。我们将需要创建一个自定义Winform,然后按照本示例中的说明进行操作。

回答

谷歌浏览器使用Windows Vista SDK来获得XP的外观。我们可以在这里下载:

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

使用此功能,我们需要启用以下DLL的延迟加载,以获取XP中的Glass效果:

  • uxtheme.dll
  • dwmapi.dl

回答

@Jonathan Holland: Is this something that can be done from .NET?

是的,使用DllImport。这是一篇不错的博客文章

回答

Google Chrome并未使用Vista SDK在XP上实现此目标。如果我们浏览" src \ chrome \ browser \ views \ frame",则有多个文件可根据系统功能来定义浏览器框架。在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中的资源来绘制框架按钮。

因此,我希望以某种廉价的方式在XP上启用Vista主题的希望破灭了。唯一的方法是手动绘制窗口的非客户区域。我相信这样的事情可能是正确的选择,因为它可以让Windows处理非客户端内容,例如移动和调整窗口大小。

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

回答

欧文,我在XP上使用的是Chrome,但在Chrome窗口中没有看到" Vista Aero"玻璃主题。我看到它是纯蓝色。

如果我们想要对控件和Windows标题栏进行自定义主题设置,则可以完成。有一个出色的,免费的WinForms UI工具包,可以做到这一点:KryptonToolkit

回答

这是一篇包含完整代码示例的文章,介绍如何对应用程序使用我们自己的自定义" chrome":

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

看起来有些不错的东西。该系列共有3篇文章,它运行出色,并且在Vista上也能运行!