所有的 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 吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章