java - 用 C++、C#、Java 等编写的桌面 GUI(图形用户界面)是否像所有 Web 或移动 GUI 一样使用 DOM 或类似概念?
问题描述
深入理解和使用文档对象模型 (DOM) 的概念来为 Web 和移动应用程序创建各种 GUI 是非常普遍的。不过,我想知道,桌面、嵌入式系统、其他电子设备等(使用 C++、C#、Java、Python 等编程)的 GUI 是否使用 DOM 的这个概念或一些类似的带有 API 的“对象模型”(应用程序编程接口) 为了在屏幕上“呈现和显示”视觉和图形内容?
解决方案
有很多疯狂的方法可以做到这一点。图形操作系统通常提供一个或多个小部件工具包,其中可以包括配置文件、绑定引擎或只是用于创建各种小部件的 API。窗口系统的行为有点像浏览器环境。
在图形游戏和其他较少受操作系统约束的应用程序中,您通常会在 GPU 加速表面上编写自己的小部件工具包,或者使用为您编写的图形工具包。推出多款游戏或类似游戏的公司将拥有一个代码库,使他们的游戏 UI 风格更容易站起来。这更接近于推动像素;但是,如果您想要良好的性能和良好的过渡,实际上您通常会将几何图形推送到 GPU 代码,而不是像素。
在 CPU 上的 4k 显示器上以 60 fps 的平滑过渡动画是不切实际的;很快做GPU很容易。因此,不能轻松与 GPU 交互的语言通常最终会由中间库或框架为它们做这件事。
其他程序实际上将具有嵌入式 chrome 引擎并喷出 HTML 并将回调绑定到其中。
如果您的 UI 更加静态,则从 CPU 推送像素是可行的。即便如此,内容通常最终还是被操作系统/窗口框架复制到 GPU 上,因此抓取整个窗口并四处移动它既流畅又便宜。
推荐阅读
- javascript - 而不是点击事件功能,请您更改为鼠标悬停事件
- java - 算法问题的解决方案有略微不正确的输出。怎么了?
- apache-flink - 使用侧输出共享操作员子任务状态
- ios - SWIFTUI - iOS:注册用户的多个视图和传输数据
- neo4j - neo4j 接收器连接器 - Avro - 未知的魔术字节
- c# - 在 C# 中避免使用魔法字符串
- rust - 漂亮的打印 Vec
带分隔符 - qt - 如何设置 QChart 纵横比
- sql - 对不同条件重复sql请求,每次都导出excel文件
- python - standardize_input_data() 上的 ValueError