WinForms应用程序中的自定义标题栏/ chrome
我几乎可以肯定我知道这个问题的答案,但是我希望有一些我忽略的事情。
即使在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上也能运行!