跳到正文

运行模式 ​

同一个页面可以在三个地方运行,运行的地方决定了它能控制多少窗口。

模式页面出现在哪里它能控制什么
独立窗口Webview2 UI 是 Default User Interface,页面就是整个 foobar2000 窗口窗口本身:尺寸、标题栏、背景效果、托盘图标、任务栏按钮
DUI 面板Default UI 布局里的一个 WebView2 Panel 元素只有自己那一块区域
CUI 面板Columns UI 布局里的一个 WebView2 Panel只有自己那一块区域

后台模式还提供第四种安排:在 Default UI 或 Columns UI 旁边单独运行一个 WebView2 UI 窗口。

不变的部分 ​

每种模式运行的都是同样的页面,用同样的 bridge。播放、播放列表、媒体库、封面、元数据、配置以及其他 foobar2000 命名空间在哪里都能用,fb.* 方法和 fb-* 组件也不需要知道自己在哪里运行。所以一个主题可以用一套代码同时服务窗口和面板。

面板里有什么不同 ​

面板是另一个界面所属窗口里的一块子区域,所以它不能操作那个窗口:

  • 改变窗口的 window.* 方法(尺寸、位置、最小化与最大化、全屏、标题栏与拖动区域、Mica、亚克力等背景效果、圆角样式、置顶)由面板调用时以 PANEL_MODE_UNSUPPORTED 失败。
  • WebView2 UI 不是主界面时,tray.* 与 taskbar.* 也以同样的方式失败,因为没有 WebView2 UI 窗口来拥有托盘图标或任务栏按钮。
  • 每个面板有自己的配置:可以加载自己的模板或 URL,也有自己的透明、焦点、拖放和开发者工具开关。

页面用 window.getMode 查询自己在哪里运行;怎样让页面适应面板,见把页面放进面板。

为什么有三种模式 ​

接管整个界面能让主题完全掌控窗口,但很多人想保留 Default UI 或 Columns UI 的播放列表和媒体库视图,只让窗口的一部分是网页:封面与歌词区、可视化、正在播放条。面板服务的就是这种需求,主题不必重新实现 foobar2000 界面的其余部分。