菜单往往是我们创建一个桌面应用时第一个需要编写的组件,本文我们系统地介绍一下如何在 GPUI 中创建菜单。特别说明:本文探讨的是 Zed 项目内而非 crates.io 上的 GPUI ,鉴于 Zed 项目迭代迅速且不保证 GPUI 模块向前兼容,验证和测试时要特别注意版本。本文基于的是 Zed 当前(2026年9月)的最新版本v1.20.2。
Zed 的菜单项在不同平台上的渲染方式是不一样的,在 Windows / Linux 平台上是由 Zed 自己来渲染的,所以它的 look & feel 跟平台上的普通应用是不一样的;只有在 macOS 上才是调用系统 API 绘制的。本文,我们只专注 Zed 自行绘制的菜单。
为了配合讲解,本文还提供一个示例,代码参见附录。这个示例完整地展示了创建一个 GPUI 菜单的全部所需工作,程序运行起来的界面如下:
本文的定位是:先了解一个菜单的整体创建流程,不过度深入细节。GPUI 的菜单涉及两个重要的组件:PopoverMenu 和 ContextMenu,它们都比较复杂,各自封装了很多自动化机制,但作为用户来讲,可以把它们作为组件直接使用,在现阶段还不需要深入探索它们的实现细节。