标题栏中的标签:秘密是什么?

Qwe*_*tie 31 windows user-interface titlebar custom-titlebar

Chrome和Firefox 4以及其他应用程序现在将其部分用户界面放在标题栏中.在Windows中,操作系统通常控制整个标题栏.应用程序可以通过删除操作系统标题栏并绘制"假"标题栏(如WinAmp)来创建自定义标题栏,但只有操作系统知道如何绘制标题栏的非自定义元素(例如,关闭/最小化/ Maximize),因操作系统版本而异.

通过什么机制,Chrome和Firefox等应用程序与操作系统"共享"标题栏(在保留原始操作系统视觉主题的同时将自定义元素放在标题栏中)?

在此输入图像描述

在Chrome中,标签会侵占标题栏,因此标题文字空间不足.

Mar*_*som 21

Microsoft在使用DWM的自定义窗口框架文章中有一个非常详细的解释.


Mår*_*röm 5

标题栏和窗口边框属于窗口的非客户区(NC).如果您正在编写基于消息泵的应用程序,则可以使用WM_NCPAINT和WM_NCHITTEST窗口消息(就像Jon写的那样)提供您自己的逻辑和该区域的外观.

虽然这个领域在之前的Windows版本中得到了相当适度的使用,但微软最近(至少从Vista开始)开始使非客户区域更具吸引力并且功能丰富.

在现代应用程序中,通常完全忽略非客户区域而是创建一个没有严格窗口边界的窗口,因此只包含一个客户区域.使用此方法,窗口必须提供它自己的实现,用于绘制窗口标题和窗口按钮(最小化,最大化/恢复和关闭).将此技术与窗口透明度相结合,可以轻松创建令人兴奋的用户界面.

如果您使用WPF,您会发现WindowChrome类对此非常有用.此类是.NET 4框架的一部分,可作为.NET 3.5 的单独库提供.

编辑

显然有人不喜欢这个答案.需要明确的是:我并不是说Chrome或任何其他应用程序正在这样做.我说我如何描述它是一个可行的解决方案,我自己和我工作的公司已经在几个项目中使用,我知道其他几个应用程序使用相同的方法.它可能不是最好的,但它肯定是一种方法!:-)

  • @Qwertie你可以[这里]下载它(http://archive.msdn.microsoft.com/WPFShell/Release/ProjectReleases.aspx?ReleaseId=4332). (2认同)