我几乎可以肯定我知道这个问题的答案,但我希望有一些我忽略的东西.
某些应用程序似乎在其标题栏和按钮上具有Vista Aero外观和感觉,即使在Windows XP上运行也是如此.(谷歌浏览器和Windows Live照片库作为例子浮现在脑海中.)我知道从WinForms实现这一目标的一种方法是创建一个无边框表单并自己绘制标题栏/按钮,然后重写WndProc
以确保移动,调整大小,和按钮点击做了他们应该做的事情(我不清楚具体细节,但可能会花一天时间阅读文档.)我很好奇,如果有一个不同的,更容易的方式,我忽略.也许我忽略了一些API调用或窗口样式?
我相信Google已经通过Chrome使用自己动手操作的方法为我解答了这个问题.如果有人有新信息,我会将问题留待另一天,但我相信我已经自己回答了这个问题.
这是一篇文章,其中包含有关如何为应用程序使用自定义"chrome"的完整代码示例:
http://geekswithblogs.net/kobush/articles/CustomBorderForms3.aspx
这看起来像一些非常好的东西.它的系列共有3篇文章,它运行得很好,而且在Vista上也是如此!
谷歌浏览器没有使用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主题,否则这就是问题的答案,但我显然无法将自己的帖子标记为答案.