所有的 GUI 框架都使用 Windows API 吗? [关闭]

Posted

技术标签:

【中文标题】所有的 GUI 框架都使用 Windows API 吗? [关闭]【英文标题】:Do all GUI frameworks use Windows API? [closed] 【发布时间】:2019-08-07 20:09:57 【问题描述】:

Microsoft 提供 Windows API 以在 Windows 上绘制 GUI。 Qt、Tk、wxWidgets、GTK、WTL、AWT、Cocoa 和 Swing 等所有 gui 框架都使用 Windows API 在 Windows 上绘制 GUI 吗?我们使用 gui 框架的方法来创建 gui,在后端他们还使用 Windows API 在 Windows 上绘制 GUI?

【问题讨论】:

【参考方案1】:

最终,任何 UI 框架都必须在底层使用操作系统的原生 UI API,那就是 Windows 上的 Win32 API 和 GDI/GDI+,是的。

【讨论】:

如果是这样,Qt 怎么能为你提供很多标准 Windows 控件中不存在的漂亮控件? @Gupta 你得到一个通用画布并开始绘图。输入代码来处理组件所做的非图形化的花里胡哨,您就拥有了一个自定义组件。 这很重要。 GUI 框架不需要使用 windows 通用控件。它可以在画布上实现自己的控件。 @Gupta,应用程序的***窗口必须是一个 Windows“窗口”对象,它具有处理窗口消息的窗口过程,以便与桌面和窗口管理器进行交互。在内部,它可以重新发明***。它不必使用标准的 Windows 控件。但不与操作系统的本机控件集成会使应用程序像大拇指一样突出。 @Gupta Qt 中一个有趣的设计选择是 Qt 不使用本机小部件(既不用于 Windows 也不用于任何其他操作系统),而是更喜欢绘制自己的小部件。那就是 Qt 包含的代码在各种操作系统下模仿本机小部件的外观,而不是实际实例化任何本机小部件。这样做是因为(根据 Qt 开发人员的说法)通过这种方式更容易在许多操作系统中获得一致的 API 行为。【参考方案2】:

您看到的“Win32”控件只是 Windows 中预定义的类。例如,“按钮”类处理 WM_PAINT、WM_ERASEBKGND、WM_LBUTTONDOWN 等以提供您期望的功能(例如,单击按钮时的 WM_COMMAND,当它在其客户区域中检测到 WM_LBUTTONDOWN/UP 时从按钮发布)。

对于普通 Win32 中没有的自定义控件,QT(和其他库)提供了自己的即用型类和自定义消息。最终,一切都简化为用于绘画的普通 WM_PAINT,只是在预定义的类中,绘画也是预定义的。

理论上,第 3 方库甚至可以使用驱动程序直接写入显卡 - 但实际上每个人都使用普通的绘图 API - 即 Direct2D、GDI+ 和 GDI。

【讨论】:

【参考方案3】:

是的。它们最终都使用 Windows API(当然在 Windows 下运行时)。 Win32 API 是可以做任何 Windows 能力的 API。 API 为开发者定义了平台。

【讨论】:

以上是关于所有的 GUI 框架都使用 Windows API 吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

GUI是如何真正制作的?

概念:SDK,API,GUI

Qt 框架适用于这个 Windows 和 Mac GUI?

我的 Windows 机器上的所有 QT 应用程序都有乱码 GUI

适用于Windows的PHP驱动的GUI应用程序

当我将 Swagger API 导入 Postman 时,所有请求名称在 Postman GUI 中最终都是空白的