【问题标题】:Do all GUI frameworks use Windows API? [closed]所有的 GUI 框架都使用 Windows API 吗? [关闭]
【发布时间】: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?

【问题讨论】:

    标签: c++ windows api user-interface


    【解决方案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 为开发者定义了平台。

      【讨论】:

        猜你喜欢
        • 2011-01-15
        • 2017-03-26
        • 2013-01-24
        • 2017-10-11
        • 2012-04-02
        • 2010-09-20
        • 2013-09-03
        • 2015-03-25
        • 2023-03-19
        相关资源
        最近更新 更多