Chrome风格的C#应用程序?
我不是说vista玻璃功能,我已经知道如何实现这一点。我所说的功能是向标题栏添加控件,就像office 2007使用徽标和工具栏一样。我已经成功地使用了DotNetBar控件套件。您需要执行一些Win32互操作来实现这一效果。根据您使用的是Winforms还是WPF,钩住消息处理的方式会有所不同(我不记得Winforms,所以我将给出WPF的所有示例)。但在这两种情况下,您都需要:Chrome风格的C#应用程序?,c#,windows-vista,google-chrome,C#,Windows Vista,Google Chrome,我不是说vista玻璃功能,我已经知道如何实现这一点。我所说的功能是向标题栏添加控件,就像office 2007使用徽标和工具栏一样。我已经成功地使用了DotNetBar控件套件。您需要执行一些Win32互操作来实现这一效果。根据您使用的是Winforms还是WPF,钩住消息处理的方式会有所不同(我不记得Winforms,所以我将给出WPF的所有示例)。但在这两种情况下,您都需要: 截取窗口的创建并修改窗口样式和扩展样式。在WPF中,您需要继承并修改以实现这一点。对于常规样式、WS_EX_WIN
- -在应用程序激活或未激活时更改标题的绘制
- -返回到没有非客户端区域的操作系统
- -一般情况下,您只需在此处使窗矩形失效,WPF将负责实际涂漆)
- -处理窗口的移动,最小化和最大化
- 如果您想更改“非客户端”区域的绘制以与操作系统主题保持一致
- 如果要在启用玻璃时扩展玻璃并获得标准OS NC玻璃绘制,并在未启用玻璃时切换到自定义逻辑
- -获取标准玻璃NC区域
- -让桌面管理器绘制玻璃和标准NC控件
- -确定是否启用了玻璃;您只能在启用玻璃时使用上述两个API。如果未启用玻璃,您需要自己绘制NC区域
WindowStyle=none
的标准WPF窗口来实现类似效果。但是,桌面对您的应用程序和其他应用程序的行为之间会有一些差异;最明显的是,您无法通过右键单击任务栏来堆叠或平铺窗口
您还可以查看一些支持某些功能的第三方组件。我没有使用过任何组件(如您所见,我并不害怕Win32 interop:-),因此我不推荐您使用任何特定组件。正如Franci提到的,您需要的是DwmExtendFrameIntoClientArea。下面是Codeproject中的一个示例,演示了如何执行此操作
WPF产品团队开发人员乔·卡斯特罗(Joe Castro)有一个名为“WPF Chrome”的MSDN代码库项目,可用于创建类似office 2007的UI(即:跨窗口的客户端和非客户端区域的控件)
在这里找到它:不是真的。我本来打算写一个,但我一直没能做到,因为家里有一个5个月大的婴儿等等…:-)注意,当玻璃关闭时,例如在TS下或当用户切换到Vista basic时,DwmExtendFrameIntoClientAre将无法工作。