首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标题栏中的标签:秘诀是什么?

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

Stack Overflow用户
提问于 2011-04-05 20:29:32
回答 4查看 11.7K关注 0票数 38

Chrome和Firefox 4,以及其他应用程序,现在把它们的一些用户界面放在标题栏中。在Windows中,操作系统通常控制整个标题栏。应用程序可以通过删除OS标题栏并绘制一个“假”标题栏来创建自定义标题栏(如WinAmp),但只有OS知道如何绘制标题栏的非自定义元素(例如,关闭/最小化/最大化),这些元素随操作系统版本的不同而有所不同。

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

在Chrome中,制表符会侵占标题栏,因此没有足够的空间用于标题栏文本。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-07 21:07:59

微软在文章使用DWM的自定义窗口帧中有一个非常详细的解释。

票数 23
EN

Stack Overflow用户

发布于 2011-04-05 21:48:06

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

虽然这一领域在以前的Windows版本中被适度使用,但微软最近(至少在Vista之后)开始使非客户端区域更具吸引力和功能丰富。

在现代应用程序中,很常见的做法是完全忽略非客户端区域,而是创建一个没有严格窗口边界的窗口,因此只包含一个客户端区域。使用这种方法,窗口必须为绘制窗口标题和窗口按钮提供自己的实现(最小化、最大化/重新分配和关闭)。将这种技术与窗口透明性相结合,可以很容易地创建令人兴奋的用户界面。

如果您正在使用WPF,您会发现WindowChrome类对此非常有用。该类是.NET 4框架的一部分,可作为.NET 3.5的独立图书馆使用。

编辑

显然有人不喜欢这个答案。我要澄清的是:我并不是说Chrome或其他应用程序就是这样做的。我要说的是,我所描述的这是一个可行的解决方案,我本人和我所在的公司已经在几个项目中使用过,而且我知道其他几个应用程序使用了相同的方法。这可能不是最好的,但这肯定是一种方法!:)

票数 7
EN

Stack Overflow用户

发布于 2011-04-05 21:12:20

我懒得去查看chrome和firefox的源代码,找不出它们到底做了什么,但它很可能包括WM_NCPAINT和WM_NCHITTEST的自定义处理。他们可以允许操作系统做基本的标题栏绘画,然后把自己的部分贴在上面。另一种方法是自己完成所有的绘制,包括调用DWM api来处理所有花哨的比特。不管是哪种方式,尝试和做都是一件丑陋的事情,如果你做得不对,它会看起来很糟糕,感觉也很糟糕。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5558118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档