MATLAB

窗口停靠与分离:拖出来变独立窗口、拖回去停靠,双屏用户刚需

👤 为我痴狂 👁 3 阅读 ❤ 0 点赞 ➦ 0 分享 📅 2026-10-12
首页› 理学› MATLAB› 正文
窗口停靠与分离:拖出来变独立窗口、拖回去停靠,双屏用户刚需

从交互范式到架构实现,系统拆解 Docking 框架的设计哲学、工程路径与前沿演进

摘要

窗口停靠与分离(Docking & Floating)是现代桌面应用与 Web IDE 中高频使用的交互模式。它允许用户将面板从主窗口中拖出成为独立窗口,再拖回重新停靠,从而在多显示器环境下灵活组织工作空间。本文以"拖拽状态机—布局序列化—跨窗口渲染—多屏适配"为主线,系统剖析 Docking 框架的架构原理与工程实现路径,覆盖 Qt Advanced Docking System、Electron、Golden Layout、Dockview 等主流技术栈,并结合多显示器 DPI 缩放、布局持久化、性能优化等实际痛点给出可落地的解决方案。文章还引入笔者提出的"布局意图连续性"分析视角,探讨 AI 驱动自适应布局的前沿方向。

关键词:窗口停靠;面板分离;多显示器;布局序列化;DPI 适配;Docking 框架

一、问题域界定:为什么停靠与分离是双屏刚需

1.1 多显示器普及带来的交互范式迁移

根据 StatCounter 2024 年全球分辨率统计,1920×1080 仍占约 22%,但 2560×1440 及以上分辨率合计已超过 20%,且多显示器配置在开发者群体中的渗透率持续攀升。笔者查阅 Stack Overflow Developer Survey 2023 数据发现,约 42% 的专业开发者使用两台及以上显示器。这一硬件现实直接催生了一个交互需求:用户希望把工具面板、代码编辑器、终端、调试器等从主窗口中"拽"出来,放到第二块屏幕上独立显示。

传统的 MDI(Multiple Document Interface)或简单分屏方案无法满足这种需求——它们把面板锁死在主窗口内部,用户只能通过调整分割条来分配空间。而 Docking 机制允许面板脱离主窗口的物理边界,成为操作系统层面的独立顶层窗口,这才是真正的"双屏刚需"。

1.2 核心概念澄清

在展开讨论之前,有必要厘清几个容易混淆的概念:

  • Dock(停靠):面板嵌入主窗口的某个停靠区域(上/下/左/右/中央),与主窗口共享同一个顶层窗口句柄。
  • Float(浮动/分离):面板脱离主窗口,拥有独立的操作系统窗口句柄,可自由移动、缩放,甚至跨显示器。
  • Tab(标签页):多个面板共享同一停靠区域时,以标签页形式叠放。
  • Auto-hide(自动隐藏):面板收起为边缘条,鼠标悬停时滑出。

本文评述:这四个概念构成了 Docking 系统的状态空间。工程实现的关键挑战不在于单个状态的渲染,而在于状态之间的平滑迁移——尤其是 Dock ↔ Float 的双向转换,涉及窗口句柄的创建/销毁、渲染上下文的迁移、布局树的重新平衡,是整个系统中最容易出 bug 的环节。

1.3 典型应用场景

应用类型 代表软件 停靠需求特征
IDE / 代码编辑器 Visual Studio、Qt Creator、Eclipse 面板数量多,布局复杂,需持久化
金融交易终端 Bloomberg Terminal、同花顺 实时数据面板,多屏监控刚需
3D / 视频编辑 Blender、DaVinci Resolve 预览窗口分离到副屏,主屏放时间线
数据分析 / BI Tableau、Power BI 图表面板自由排列,支持演示模式

二、交互模型:拖拽状态机与命中检测

2.1 拖拽状态机的形式化描述

一次完整的"拖出—停靠"操作,在交互层面可以建模为一个有限状态机(FSM)。笔者认为,理解这个状态机是掌握 Docking 系统行为的关键。以下是笔者归纳的状态转移模型:

状态集合 S = { Idle, DragStarted, Dragging, HoverDockTarget, DropToDock, DropToFloat, Cancelled }

转移规则:
  Idle          --[mousedown on tab]--> DragStarted
  DragStarted   --[move > threshold]--> Dragging
  DragStarted   --[mouseup]--> Idle
  Dragging      --[enter dock zone]--> HoverDockTarget
  Dragging      --[leave window bounds]--> DropToFloat (预览)
  HoverDockTarget --[mouseup]--> DropToDock
  Dragging      --[mouseup outside]--> DropToFloat
  Dragging      --[ESC]--> Cancelled
  Cancelled     --> Idle (恢复原布局)

这个状态机看似简单,但在实际工程中,每个转移都需要处理大量边界情况。例如,DragStarted → Dragging 的阈值判定(通常为 4-8 像素)直接影响用户体感:阈值太小会导致误触,太大则感觉拖拽"粘滞"。

本文评述:阈值的选择并非纯经验问题。根据 Fitts 定律的扩展研究,拖拽启动阈值与目标面板尺寸存在相关性。笔者建议采用自适应阈值:threshold = clamp(4, 0.02 * min(width, height), 12),在面板较小时降低阈值以提升响应感,面板较大时提高阈值以避免误触。

2.2 停靠区域的命中检测

当用户拖拽面板经过主窗口时,系统需要实时判断当前光标位置对应哪个停靠目标。主流实现采用"停靠指示器"(Dock Indicator / Drop Guide)模式:在光标附近绘制一个半透明的菱形或十字形覆盖层,将目标区域划分为上、下、左、右、中央五个投放区。

命中检测的算法核心是:给定光标坐标 (x, y) 和目标矩形 (rx, ry, rw, rh),计算归一化偏移量,再根据偏移量落入的扇区确定停靠方向。Qt Advanced Docking System 采用的是基于距离权重的方案,而 Visual Studio 的实现则使用了更复杂的"嵌套停靠"逻辑,支持在已有面板内部继续分割。

工程提示:命中检测的性能至关重要。在拖拽过程中,每帧都需要重新计算,如果使用朴素的遍历所有停靠区域的方式,面板数量多时会出现明显卡顿。建议使用空间索引(如 R-tree 或简单的网格划分)加速查询。

2.3 拖拽过程中的视觉反馈

优秀的 Docking 实现会在拖拽过程中提供三层视觉反馈:

  1. 拖拽幽灵(Drag Ghost):跟随光标的半透明面板缩略图,让用户知道"正在拖什么"。
  2. 停靠指示器(Dock Guide):显示"会停到哪里"。
  3. 目标区域高亮:被停靠的面板区域轻微变色,确认"谁会被影响"。

这三层反馈缺一不可。笔者在实际项目中发现,缺少拖拽幽灵会导致用户对拖拽操作产生不确定感,尤其是在跨窗口拖拽时,因为光标可能已经离开源窗口的可视区域。

三、架构解剖:Docking 框架的核心组件

3.1 布局树:一切的核心数据结构

几乎所有成熟的 Docking 框架都采用树形结构来描述布局。这棵树通常包含三种节点类型:

  • Split Node(分割节点):表示水平或垂直分割,包含方向、比例和子节点列表。
  • Tab Group Node(标签组节点):包含多个面板,同一时刻只显示一个。
  • Panel Node(面板叶节点):实际的内容载体,对应一个具体的视图组件。

以 Golden Layout 为例,其布局树使用 JSON 描述,每个节点有 type 字段标识节点类型,content 字段存储面板元数据。这种设计的好处是序列化/反序列化非常自然——直接 JSON.stringify 即可持久化。

3.2 组件分层架构

从工程视角看,一个完整的 Docking 系统可以划分为以下层次:

层次 职责 典型实现
交互层 鼠标事件、拖拽状态机、命中检测 DragManager / DragHandler
布局层 布局树维护、分割比例计算、重排 LayoutManager / DockTree
渲染层 面板绘制、标签栏、分割条、指示器 DockWidget / TabBar / Splitter
窗口层 顶层窗口管理、跨窗口拖拽 FloatingWindow / NativeWindow
持久化层 布局序列化、版本迁移、恢复 LayoutSerializer / PersistenceManager

本文评述:这种分层架构的核心价值在于关注点分离。交互层不需要知道布局树的具体结构,布局层不需要关心渲染细节,窗口层不需要理解业务逻辑。但在实际项目中,很多团队为了快速上线,往往把这几层揉在一起,导致后期维护成本急剧上升。笔者建议从第一天就严格分层,哪怕初期代码量会增加 30%。

3.3 面板注册与生命周期

每个可停靠面板都需要在框架中注册,注册信息通常包括:唯一 ID、标题、图标、默认位置、最小尺寸、是否可关闭/可浮动等。面板的生命周期涉及创建、激活、停用、销毁四个阶段,其中"停用"不等于"销毁"——当面板被其他标签页遮挡时,它应该被停用但保留状态,以便快速切换回来。

Qt Advanced Docking System 通过 CDockWidget 类管理面板生命周期,其 toggleView() 方法控制可见性而不销毁组件。Electron 生态中的 Dockview 则使用 React 组件的挂载/卸载机制,配合 keepAlive 选项来决定是否保留 DOM。

四、布局序列化:从内存树到持久化格式

4.1 序列化格式设计

布局持久化是 Docking 系统的"记忆"能力。用户精心调整的布局,下次打开应用时应该原样恢复。这要求序列化格式满足三个条件:完整(不丢失任何布局信息)、紧凑(不产生过大存储开销)、可迁移(版本升级后能兼容旧格式)。

以下是笔者推荐的一种布局序列化 JSON 结构(以模拟数据为例):

{
  "version": "2.1.0",
  "layout": {
    "type": "split",
    "direction": "horizontal",
    "ratio": 0.25,
    "children": [
      {
        "type": "tabgroup",
        "activeIndex": 0,
        "panels": [
          { "id": "explorer", "title": "资源管理器", "closable": true },
          { "id": "outline", "title": "大纲", "closable": true }
        ]
      },
      {
        "type": "split",
        "direction": "vertical",
        "ratio": 0.7,
        "children": [
          { "type": "panel", "id": "editor", "title": "编辑器" },
          { "type": "panel", "id": "terminal", "title": "终端" }
        ]
      }
    ]
  },
  "floatingWindows": [
    {
      "bounds": { "x": 1920, "y": 0, "width": 800, "height": 600 },
      "displayId": "DISPLAY2",
      "layout": { "type": "panel", "id": "preview", "title": "预览" }
    }
  ]
}

本文评述:注意 floatingWindows 字段中记录了 displayId,这是多屏场景下的关键设计。仅记录绝对坐标是不够的——当用户拔掉第二块显示器后,恢复布局时窗口可能出现在屏幕外。记录显示器标识,可以在显示器不可用时将窗口回退到主屏。

4.2 版本迁移策略

布局格式会随产品迭代而演进。新增字段、废弃字段、改变语义都是常见情况。工程上需要一套版本迁移机制:读取旧版本布局时,逐版本应用迁移函数,最终转换为当前版本格式。

笔者建议采用"迁移链"模式:v1→v2→v3→current,每个迁移函数只负责相邻版本之间的转换。这样新增版本时只需添加一个迁移函数,而不需要修改所有旧版本的兼容逻辑。

4.3 布局恢复的容错处理

恢复布局时可能遇到多种异常:面板 ID 不存在(插件被卸载)、显示器配置变化、布局数据损坏等。健壮的实现应该遵循"尽力恢复"原则:能恢复的部分尽量恢复,无法恢复的部分回退到默认位置,而不是整个布局重置。

实践案例:Visual Studio Code 在布局恢复时,如果检测到某个视图的扩展已被禁用,会将该视图从布局树中移除,同时保持其他视图的位置不变。这种"局部降级"策略比"全局重置"的用户体验好得多。

五、跨窗口渲染:分离窗口的生命周期管理

5.1 原生窗口 vs 模拟窗口

面板分离后,实现方式有两种路线:

  • 原生顶层窗口:调用操作系统 API 创建真正的窗口句柄(如 Windows 的 CreateWindowEx、macOS 的 NSWindow)。优点是支持操作系统级特性(贴边、任务栏、窗口管理),缺点是需要处理跨进程/跨线程渲染。
  • 模拟窗口:在主窗口内用绝对定位的 div 模拟浮动面板。优点是实现简单、渲染统一,缺点是无法真正脱离主窗口边界,多屏场景下体验差。

本文评述:对于双屏刚需场景,必须选择原生窗口路线。模拟窗口在多显示器环境下会暴露致命缺陷——用户无法将面板拖到另一块屏幕上。Electron 的 BrowserWindow 和 Qt 的 QMainWindow 都提供了原生窗口能力,应当充分利用。

5.2 渲染上下文迁移

当面板从停靠状态变为浮动状态时,其渲染上下文需要从主窗口迁移到新窗口。这个过程在不同技术栈中的复杂度差异很大:

技术栈 迁移方式 复杂度
Qt Widgets setParent() 重新指定父窗口 低
Electron DOM 节点移动 + IPC 状态同步 中
Web (Golden Layout) DOM 重挂载 + 事件重新绑定 中高
Web (Dockview) React Portal + 状态提升 中

Qt 的方案最为简洁,因为 Qt 的窗口系统本身就是基于父子关系的,setParent(nullptr) 即可将控件变为顶层窗口,再设置 Qt::Window 标志即可。Web 方案则复杂得多,因为 DOM 节点在跨窗口移动时会丢失事件监听器和组件状态。

5.3 跨窗口拖拽的实现细节

跨窗口拖拽是 Docking 系统中最具挑战性的部分。当用户将面板从主窗口拖出时,系统需要:

  1. 检测光标离开主窗口边界(mouseleave 或全局鼠标钩子)。
  2. 创建新的顶层窗口,将面板内容迁移过去。
  3. 将后续鼠标事件路由到新窗口(或使用全局钩子继续跟踪)。
  4. 当用户将窗口拖回主窗口区域时,检测停靠意图并执行反向迁移。

在 Electron 中,可以使用 screen.getCursorScreenPoint() 获取全局光标位置,配合 win.setBounds() 实时更新浮动窗口位置。Qt 则通过 QDrag 和 dragMoveEvent 实现类似效果。

六、多屏适配:DPI 缩放与坐标系转换

6.1 多显示器 DPI 差异问题

现代多屏配置中,不同显示器的 DPI 往往不同。例如,笔记本内屏可能是 225 PPI(缩放 200%),外接显示器是 92 PPI(缩放 100%)。当用户将面板从内屏拖到外屏时,如果不做处理,面板会突然变大或变小。

根据 Microsoft 的 Per-Monitor DPI Awareness 文档,Windows 应用需要声明 DPI 感知级别,并在 WM_DPICHANGED 消息中调整窗口尺寸。Qt 6 通过 QScreen::devicePixelRatio() 提供每屏幕的缩放因子,Electron 则通过 screen.getDisplayNearestPoint() 获取显示器信息。

6.2 坐标系转换矩阵

在多屏环境下,存在多套坐标系:逻辑坐标(与 DPI 无关)、物理坐标(像素级)、屏幕坐标(跨显示器的全局坐标)。它们之间的转换是 Docking 系统必须正确处理的基础设施。

笔者归纳的转换关系如下:

物理坐标 = 逻辑坐标 × devicePixelRatio
屏幕坐标 = 物理坐标 + 显示器原点偏移
逻辑屏幕坐标 = 屏幕坐标 / 目标显示器 devicePixelRatio

本文评述:很多 Docking 实现在跨屏拖拽时出现"窗口跳跃"或"尺寸突变",根源就在于坐标系转换时使用了错误的 DPI 因子。正确的做法是:在拖拽过程中持续检测光标所在的显示器,使用该显示器的 DPI 因子进行转换,而不是使用源窗口的 DPI。

6.3 显示器热插拔处理

用户在使用过程中可能拔掉或插入显示器。此时,位于被移除显示器上的浮动窗口需要被"抢救"回主屏。工程上需要监听系统的显示器变更事件:

  • Windows:WM_DISPLAYCHANGE 消息
  • macOS:NSApplicationDidChangeScreenParametersNotification
  • Qt:QGuiApplication::screenRemoved 信号
  • Electron:screen.on('display-removed') 事件

检测到显示器移除后,应遍历所有浮动窗口,将位于已移除显示器上的窗口移动到主显示器可见区域内,并触发一次布局重新计算。

七、技术栈横评:Qt / Electron / Web 方案对比

7.1 Qt Advanced Docking System

Qt Advanced Docking System(ADS)是目前 Qt 生态中最成熟的开源 Docking 框架,由德国开发者 Manuel Freiholz 维护。它提供了完整的停靠、浮动、自动隐藏、布局持久化功能,支持 Qt 5.12+ 和 Qt 6。

ADS 的核心类包括 CDockManager(管理器)、CDockWidget(面板)、CFloatingDockContainer(浮动容器)。其架构设计清晰,但代码量较大(约 3 万行),学习曲线较陡。

本文评述:ADS 的优势在于与 Qt 原生窗口系统的深度集成,浮动窗口是真正的原生窗口,多屏体验优秀。缺点是自定义 UI 风格需要修改源码,且文档相对简略。适合对稳定性要求高的商业项目。

7.2 Electron 生态方案

Electron 应用实现 Docking 有两条路线:一是使用 Web 版 Docking 库(如 Golden Layout、Dockview),二是基于 Electron 的多窗口 API 自行实现。

Golden Layout 是最早的 Web Docking 库之一,支持嵌套分割、标签页、弹出窗口。但其弹出窗口使用的是浏览器 window.open(),在 Electron 中需要额外配置才能获得原生窗口行为。Dockview 是较新的替代品,基于 React,API 更现代,对 TypeScript 支持更好。

本文评述:Electron 方案的最大挑战是状态同步。当面板在多个 BrowserWindow 之间移动时,React/Vue 的组件状态、Redux store、IPC 通道都需要同步迁移。笔者建议采用"状态提升 + 序列化传递"的模式:将面板状态存储在渲染进程之外(主进程或独立的状态服务),面板组件只负责渲染,不持有状态。

7.3 纯 Web 方案

纯 Web 环境(浏览器内)无法创建真正的操作系统窗口,只能使用 window.open() 打开新标签页或弹出窗口。这种方式在多屏场景下体验受限,但对于 Web IDE(如 CodeSandbox、StackBlitz)来说仍是可行方案。

随着 Window Management API 的推进,浏览器未来可能提供更强大的多窗口能力。根据 W3C 的 Window Placement 规范草案,getScreenDetails() API 允许网页获取多显示器信息并精确控制窗口位置。Chrome 自 2022 年起已提供实验性支持。

八、性能优化:渲染、内存与拖拽流畅度

8.1 拖拽帧率保障

拖拽操作对帧率极其敏感。研究表明,当帧率低于 30 FPS 时,用户会明显感知到卡顿;低于 20 FPS 时,操作会变得难以精确控制。Docking 系统在拖拽过程中需要同时处理:鼠标事件、命中检测、视觉反馈更新、布局预览计算。这些操作如果都在主线程同步执行,很容易掉帧。

优化策略包括:

  1. 事件节流:将 mousemove 事件节流到 requestAnimationFrame 节奏,避免每像素触发一次计算。
  2. 命中检测缓存:停靠区域的几何信息在拖拽开始时计算一次,拖拽过程中只做简单比较。
  3. 视觉反馈分层:拖拽幽灵使用 CSS transform 或 GPU 合成层,避免触发重排。
  4. 布局预览延迟:停靠指示器的更新可以略微延迟(16-32ms),优先保证拖拽幽灵的跟手性。

8.2 内存管理

每个面板背后可能是一个复杂的视图组件(如代码编辑器、图表、终端)。当面板被隐藏或浮动时,如果不当处理,可能导致内存泄漏或重复创建。

笔者建议采用"池化 + 懒加载"策略:面板组件在首次显示时创建,之后保留在内存池中;当面板被关闭时,标记为可回收而非立即销毁;当内存压力增大时,再批量回收长期未使用的面板。

8.3 大规模面板场景

在金融终端等场景中,面板数量可能达到数十个。此时布局树的深度和宽度都会显著增加,渲染和计算开销随之上升。优化手段包括:

  • 虚拟化渲染:只渲染可视区域内的面板。
  • 布局计算增量更新:只重新计算受影响的分支。
  • 标签页懒渲染:非激活标签页的内容不渲染或使用轻量占位。

九、前沿预判:AI 驱动与自适应布局

9.1 布局意图连续性

笔者提出"布局意图连续性"(Layout Intent Continuity)这一分析视角:用户在调整布局时,其操作背后存在一个隐含的意图——"我想同时看到 A 和 B"、"我想让 C 占据更大空间"。传统的 Docking 系统只记录布局的几何状态,丢失了意图信息。如果系统能够推断并保持这种意图,就能在窗口尺寸变化、显示器配置变化时做出更智能的调整。

例如,用户将终端面板拖到编辑器下方,意图可能是"编辑时需要参考终端输出"。当用户切换到全屏时,系统可以自动保持编辑器和终端的可见比例,而不是简单地按像素比例缩放。

9.2 基于使用模式的自适应布局

结合用户行为数据,Docking 系统可以实现自适应布局。例如:

  • 检测到用户频繁在调试时打开"变量"面板,自动将其停靠在编辑器右侧。
  • 检测到用户经常将"预览"面板拖到第二屏,下次启动时主动提示"是否在第二屏打开预览"。
  • 根据当前任务类型(编码/调试/测试)自动切换布局预设。

本文评述:这类功能需要谨慎设计,避免变成"烦人的助手"。核心原则是建议而非强制——系统可以提示或预选,但最终决定权在用户。同时需要提供清晰的"撤销"和"恢复默认"入口。

9.3 大语言模型在布局管理中的潜在应用

2023 年以来,LLM 在代码生成、UI 理解方面展现出强大能力。一个值得探索的方向是:用户用自然语言描述布局需求,系统自动生成布局配置。例如,用户输入"我要一个适合调试 Python 的布局",系统生成包含编辑器、终端、变量查看器、调用栈的布局方案。

根据笔者对现有研究的梳理,这一方向面临的主要挑战是:布局配置的搜索空间巨大,LLM 需要理解面板之间的语义关系(哪些面板适合放在一起),以及不同屏幕尺寸下的适配规则。目前尚无成熟的工程方案,但已有学术论文探讨基于强化学习的 UI 布局生成(如 2023 年 CHI 会议上的相关研究)。

十、工程实践清单与参考资源

10.1 从零实现 Docking 系统的步骤清单

  1. 定义布局树数据结构(Split / TabGroup / Panel 三种节点)。
  2. 实现布局树的渲染器(递归遍历,生成对应的 UI 组件)。
  3. 实现分割条拖拽调整比例。
  4. 实现标签页切换与拖拽排序。
  5. 实现拖拽状态机与命中检测。
  6. 实现停靠指示器视觉反馈。
  7. 实现面板分离(创建原生窗口)。
  8. 实现跨窗口拖拽与重新停靠。
  9. 实现布局序列化与反序列化。
  10. 实现多显示器 DPI 适配。
  11. 实现显示器热插拔处理。
  12. 性能优化与边界情况处理。

10.2 推荐学习资源

10.3 视频教程推荐

  • Qt Advanced Docking System 集成教程(YouTube):搜索 "Qt Advanced Docking System tutorial"
  • Electron 多窗口应用开发(B站):搜索 "Electron 多窗口 拖拽"
  • Golden Layout 快速上手(YouTube):搜索 "Golden Layout getting started"

参考文献

[1] Freiholz M. Qt Advanced Docking System[CP/OL]. GitHub, 2024. https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System

[2] Golden Layout Contributors. Golden Layout Documentation[EB/OL]. 2024. https://golden-layout.com/docs/

[3] Dockview Contributors. Dockview: Zero Dependency Docking Layout Manager[EB/OL]. 2024. https://dockview.dev/

[4] Microsoft. High DPI Desktop Application Development on Windows[EB/OL]. Microsoft Learn, 2023.

[5] W3C. Window Placement Specification (Draft)[EB/OL]. 2023. https://w3c.github.io/window-placement/

[6] Electron Contributors. BrowserWindow API Documentation[EB/OL]. 2024. https://www.electronjs.org/docs/latest/api/browser-window

[7] StatCounter. Desktop Screen Resolution Stats Worldwide[DB/OL]. 2024. https://gs.statcounter.com/screen-resolution-stats

[8] Stack Overflow. 2023 Developer Survey[DB/OL]. 2023. https://survey.stackoverflow.co/2023/

[9] Nielsen J. Usability Engineering[M]. Morgan Kaufmann, 1994.(Fitts 定律相关章节)

[10] Card S K, Moran T P, Newell A. The Psychology of Human-Computer Interaction[M]. Lawrence Erlbaum Associates, 1983.

[11] Qt Company. Qt 6 Documentation: QScreen Class[EB/OL]. 2024. https://doc.qt.io/qt-6/qscreen.html

[12] Qt Company. Qt 6 Documentation: QDockWidget Class[EB/OL]. 2024. https://doc.qt.io/qt-6/qdockwidget.html

[13] Visual Studio Team. Customize Window Layouts in Visual Studio[EB/OL]. Microsoft Learn, 2023.

[14] Blender Foundation. Blender Manual: Window System[EB/OL]. 2024. https://docs.blender.org/manual/en/latest/interface/window_system/

[15] Blackmagic Design. DaVinci Resolve Reference Manual[EB/OL]. 2024.

[16] Tableau. Tableau Desktop User Guide: Dashboard Layouts[EB/OL]. 2024.

[17] Microsoft. Power BI Desktop Documentation: Report Layout[EB/OL]. 2024.

[18] Bloomberg. Bloomberg Terminal Architecture Overview[EB/OL]. 2023.

[19] Eclipse Foundation. Eclipse Rich Client Platform Documentation[EB/OL]. 2023.

[20] JetBrains. IntelliJ Platform SDK: Tool Windows[EB/OL]. 2024.

[21] CodeSandbox Team. CodeSandbox Architecture Blog[EB/OL]. 2023.

[22] StackBlitz Team. WebContainers: Running Node.js in the Browser[EB/OL]. 2023.

[23] Google Chrome Team. Window Management API[EB/OL]. Chrome Developer Documentation, 2023.

[24] Mozilla. Window.open() API Documentation[EB/OL]. MDN Web Docs, 2024.

[25] React Team. React Portals Documentation[EB/OL]. 2024. https://react.dev/reference/react-dom/createPortal

[26] Vue Team. Vue Teleport Documentation[EB/OL]. 2024. https://vuejs.org/guide/built-ins/teleport.html

[27] Apple. NSWindow Class Reference[EB/OL]. Apple Developer Documentation, 2024.

[28] Microsoft. CreateWindowEx Function Documentation[EB/OL]. Microsoft Learn, 2023.

[29] X.Org Foundation. X Window System Protocol[EB/OL]. 2023.

[30] Wayland Project. Wayland Protocol Documentation[EB/OL]. 2024.

[31] Freedesktop.org. XDG Shell Protocol[EB/OL]. 2023.

[32] Chromium Team. Multi-Screen Window Placement[EB/OL]. 2023.

[33] Electron Team. screen Module API[EB/OL]. 2024. https://www.electronjs.org/docs/latest/api/screen

[34] Qt Company. High DPI Scaling Documentation[EB/OL]. 2024. https://doc.qt.io/qt-6/highdpi.html

[35] Microsoft. DPI Awareness Mode Documentation[EB/OL]. 2023.

[36] Apple. High Resolution Guidelines for macOS[EB/OL]. 2023.

[37] W3C. CSS Device Adaptation Specification[EB/OL]. 2023.

[38] MDN. Window.devicePixelRatio[EB/OL]. 2024.

[39] Google. Material Design: Layout Principles[EB/OL]. 2023.

[40] Apple. Human Interface Guidelines: Windows[EB/OL]. 2024.

[41] Microsoft. Fluent Design System: Layout[EB/OL]. 2023.

[42] Nielsen Norman Group. Window Management UX Research[EB/OL]. 2023.

[43] CHI Conference. Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems[C]. ACM, 2023.

[44] UIST Conference. Proceedings of the 36th Annual ACM Symposium on User Interface Software and Technology[C]. ACM, 2023.

[45] IEEE VIS. Proceedings of IEEE Visualization Conference 2023[C]. IEEE, 2023.

[46] Myers B A. A Brief History of Human-Computer Interaction Technology[J]. Interactions, 1998, 5(2

🔒 复制本站文章内容需登录并达到 L3。当前:未登录

分享到

💬
微信
📷
朋友圈
🐧
QQ好友
🌐
QQ空间
👁
微博
📌
钉钉
🔗
复制链接
📑
复制图文

微信扫一扫分享

打开微信「扫一扫」,扫描二维码后在微信中分享给好友或朋友圈。

💬 评论 (0)

评论功能已关闭

⏸️ 本站暂未开放评论功能,不能进行评论,此为规划的后续开发预留
首页| 关于本网| 网站声明| 联系我们| 网站纠错| 服务| 网站地图
黔ICP备19010680号-1  |  邮箱:six528528@163.com
贵公网安备 52010302001819号
Copyright 2019-2026 http://www.databrush.com/ All rights reserved.
QQ
QQ扫一扫
Logo
DBN数据刷