windows - Windows 上的 Mac 风格菜单,系统范围

标签 windows user-interface winapi desktop

我是 Mac 用户和 Windows 用户(曾几何时我曾经是 Amiga 用户)。我更喜欢 Mac(和 Amiga)采用的屏幕顶部菜单栏方法(/采用),我想为 Windows 编写一些可以提供此功能(和工作与现有应用程序)。

我知道这有点雄心勃勃,尤其是因为它只是一个棘手的项目,而且由于家庭不断壮大,我的空闲时间几乎为零。我研究了几年,得出的结论是这非常困难,但那是在 StackOverflow 之前 ;)

我想我需要做这样的事情才能达到预期的结果:

  • 创建将成为位于所有其他窗口顶部的自定义菜单栏的应用程序。自定义菜单必须提供所有功能来替换标准的 Win32 窗口内菜单。没关系,它只是一个行为类似于菜单栏的应用程序。

  • 它会不断枚举窗口以查找正在创建/销毁的窗口。它会枚举子窗口集合以找到菜单栏。

  • 它将构建一个菜单,代表窗口中的菜单选项。

  • 它会隐藏窗口中的菜单栏,并将所有直接子窗口向上移动相应的像素数量。它也会缩短窗口高度。

  • 它会捕获应用程序发送到其菜单的所有消息,以相应地调整自定义菜单。

  • 它会不断轮询当前事件的窗口,因此它可以在必要时切换菜单。

  • 当发生菜单点击时,它会使用真实菜单子(monad)控件的 hwnd 向窗口发送消息。

就是这样!容易,嗯?不,可能不是。

我非常感谢 Win32 专家关于从哪里开始的任何建议、想法、陷阱以及是否可能的想法。我白天不是 Win32 C++ 程序员,但我已经做了一些,我不介意通过 MSDN 平台 SDK 文档挖掘我的方式...

(我还有另一个想法,即在多显示器设置中为每个屏幕创建一个任务栏并显示桌面的事件窗口——但我认为我可以在托管代码中做到这一点并为自己节省大量工作).

最佳答案

顶部的 Mac 菜单与 Windows 方法之间的真正区别不仅在于菜单:- 它是如何使用菜单来破解打开的 MDI 应用程序。

在 Windows 中,MDI 应用程序(如 dev studio 和 office)将其所有文档窗口托管在应用程序框架窗口中。在 Mac 上,没有每个应用程序的框架窗口,所有文档窗口都与来自其他应用程序的所有其他文档窗口共享桌面。

缺乏对传统 MDI 应用程序进行深度改造以将其文档窗口移出并放到桌面上的能力,无论多么高尚,获得桌面菜单的尝试似乎都注定是一种没有实际用途或实用性的新奇事物.

考虑到所有因素,我对 Mac 和 Windows(以及 Linux)上的窗口管理器的当前状态相当沮丧:浏览器中的选项卡式分页之类的东西确实是应用程序开发人员的绝望行为,他们没有得到这样的东西作为标准窗口管理器的一部分——我认为这是真正属于标签的地方。为什么 notepad++ 应该有一组选项卡、chrome、firefox 和 internet explorer(是的,我知道运行所有 4 个),以及开发工作室对接 View 、各种绘图程序。

这只是对现代多文档界面应该是什么样子的各种不同解释。

关于windows - Windows 上的 Mac 风格菜单,系统范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2386464/

相关文章:

c++ - Windows 7 中的背景色工具栏和菜单栏

windows - 使用 HTTPAPI_VERSION_1 API 在 Windows HTTP 服务器上配置 SSL

python - windows可执行文件对应于系统托盘图标?

html - Firefox 中的 Helvetica Neue 字体问题

c++ - 邮寄消息 : How to post a message to a process that does not have a window?

c - 在Windows上用C编写自修改代码,无法编写补丁

java - 在 GWT 中取消按键事件

c++ - 帮助处理 GUI 中的事件顺序

c# - 锚定 - 使两个组件各占面板的一半

c++ - Win32 C++ 可以通过过程发送额外信息