当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《WinForms应用程序中的自定义标题栏/镶边》经验,为你挑选了2个好方法。

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

某些应用程序似乎在其标题栏和按钮上具有Vista Aero外观和感觉,即使在Windows XP上运行也是如此.(谷歌浏览器和Windows Live照片库作为例子浮现在脑海中.)我知道从WinForms实现这一目标的一种方法是创建一个无边框表单并自己绘制标题栏/按钮,然后重写WndProc以确保移动,调整大小,和按钮点击做了他们应该做的事情(我不清楚具体细节,但可能会花一天时间阅读文档.)我很好奇,如果有一个不同的,更容易的方式,我忽略.也许我忽略了一些API调用或窗口样式?

我相信Google已经通过Chrome使用自己动手操作的方法为我解答了这个问题.如果有人有新信息,我会将问题留待另一天,但我相信我已经自己回答了这个问题.



1> Chris Pietsc..:

这是一篇文章,其中包含有关如何为应用程序使用自定义"chrome"的完整代码示例:

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

这看起来像一些非常好的东西.它的系列共有3篇文章,它运行得很好,而且在Vista上也是如此!



2> OwenP..:

谷歌浏览器没有使用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主题,否则这就是问题的答案,但我显然无法将自己的帖子标记为答案.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有