【问题标题】:What is the best way to implement a GUI without a GUI designer?在没有 GUI 设计器的情况下实现 GUI 的最佳方法是什么?
【发布时间】:2023-03-25 11:39:01
【问题描述】:

如果有人不想使用 IDE(只是一个编辑器、一个编译器和一个调试器),那么手动实现 GUI 的最佳方法是什么?

我想用纯 C 或 C++ 编写 WinAPI 应用程序。

【问题讨论】:

  • 您可以像使用手头的工具编写代码一样创建它。我真的不明白这个问题。
  • 为什么不想使用 IDE?如果你想要一些挑战,你也可以尝试只用你的脚来编码,但是..
  • 作为从 Windows 2.0 开始就一直在编写 Windows 的人,我可以向您保证,除了最简单的应用程序之外,您真的不想这样做。
  • @andreas:看:charlespetzold.com/etc/DoesVisualStudioRotTheMind.html 最后一节:纯编码的纯粹乐趣 :)
  • 试试 QT。你会惊讶于你可以用五行代码在其中完成多少 UI。

标签: c++ c user-interface winapi


【解决方案1】:

如果您只有 Windows API,您将使用文本编辑器在代码中创建 UI 小部件。不涉及 XAML 或其他中间语言或标记。如果您想进行布局,您可以使用铅笔和纸或 Visio 之类的图形工具来模拟 UI,这样您就可以计算出您想要的所有内容。

或者,您也可以将生锈的螺丝刀插在小脚趾和小脚趾甲之间。这可能会不那么痛苦。

编辑:其他发帖者谈到使用其他框架,如 Qt 或使用布局面板等。但问题是关于 Windows API 和 C/C++。这让我们回到Petzold。不是crap he's written recently,而是“Programming Windows”的东西。在那个时代很棒,这几乎是 15 年前所做的事情,但如果没有非常非常好的理由,我永远不会回去!

【讨论】:

  • 完全有可能实现一个直接与 Win32 HWND 一起工作的动态布局系统,并提供您在 Swing/WPF/Qt/任何布局中看到的所有功能。
【解决方案2】:

Qt 的布局允许您轻松实现基本的 GUI,而无需手动布置 GUI。

【讨论】:

    【解决方案3】:

    大多数答案都是错误的恕我直言。如果没有使用 Pencil 和 Paper 的 GUI 编辑器,你不会给出精确的坐标,那太糟糕了。

    我以前用手工创建表单,但我用wxWidgets and sizer,用手创建表单很容易,只需添加一个sizer和控件。

    在 wxWidgets By Jorg http://www.xs4all.nl/~jorgb/wb 中也有各种符号可以做到这一点,您只需在一行中指定表单布局,它就会生成代码。我找不到链接。

    【讨论】:

    • 使用像 wxWidgits 这样的图形 API 确实让你的生活更轻松——尤其是使用 sizers。事实上,许多窗口库都提供了这样的布局 API——包括 Java 自己的 Swing。我编写了一个可移植的 GUI 应用程序,它只使用文本和 wxWidgets,为 Microsoft Windows 和 Linux 交叉编译,我对结果非常满意。
    • 我几乎从不为 Swing 使用 IDE UI 编辑器,因为我做过的大多数应用程序都是数据驱动的。对于一次性表单,使用 IDE 是可以的,但对于任何想要抽象数十或数百个视图的东西,它们都是错误的工具。
    【解决方案4】:

    我推荐 Gtk+。 TkInter 也可以使用。

    【讨论】:

      【解决方案5】:

      GUI 编辑器所做的只是编写代码来反映您放置在表单上的那些项目的属性。如果没有 GUI 编辑器,您将需要自己编写所有代码。

      【讨论】:

      • 并计算出窗体上所有控件的坐标,以及窗体大小。很多代码/编译/运行周期才能让它正确。
      • @Ken -- 每个主要的现代 GUI 库都提供布局/大小调整器,除非您有非常特殊的情况,否则您应该使用它们而不是手动定位。
      • @Steve:“我想到了一个 WinAPI 应用程序”
      • @Pavel:好点子。我建议选择一个不同的库,但如果在 WinAPI 上设置了 OP,那么 Ken 的评论是绝对正确的。
      【解决方案6】:

      我不确定我是否在回答您的问题,但我通常使用铅笔和一张纸来设计 GUI。

      我画出界面的布局,然后在 DIV 标记周围画出虚线框以及如何组合在一起的控件集。

      然后我从中编写 HTML 代码。我发现在某些情况下使用铅笔比使用鼠标更有效。

      【讨论】:

        【解决方案7】:

        您可以为对话框手动编写 .rc 文件。对于主窗口框架和视图等,您需要手动编写代码。如果您使用 Visual Studio 的向导之一在项目中存根,则可以快速启动该代码。

        【讨论】:

        • 这仅适用于 microsoft 编译器还是也适用于 gcc?
        • RC 文件专门用于创建 Win32 应用程序,您需要使用 Microsoft 的 RC 文件编译器来编译资源。您也许可以使用 GCC 构建应用程序的其余部分,但不要将其与任何类型的跨平台支持混淆。
        【解决方案8】:

        在纸上或任何你想要的地方模拟它。

        精确的边距、宽度、左对齐...

        一旦您对屏幕上每个元素的位置有了准确的了解,您“只需”翻译它即可。

        这是惩罚还是什么?

        【讨论】:

          【解决方案9】:

          这是一项艰苦的工作,因此我建议使用支持文本替换宏的文本编辑器并创建自己的“语法”来处理重复性任务。一些优秀的文本编辑器允许您定义自己的“智能感知”并且已经内置了 Win32 API 智能感知。

          【讨论】:

            【解决方案10】:

            开发 GUI 的体验因您使用的图形工具包而异。在 Windows 中,最典型的(我认为是低级别的)是 MFC API,但这不是唯一的可能性,因为您还可以使用 GTK+ 或 Tk 等工具的更高方法。 当然,您需要在 Windows 上安装这些库。

            例如,在 GTK+ 中,您可以使用 XML 文件来描述大部分 GUI,这可能比硬编码更容易。您也可以制作一个 VBox 对象并向其添加其他对象,并且对象将自动定位在前一个对象的下方,而不必测量和描述其 XY 位置。

            在没有可视化编辑器的情况下制作 GUI 是完全可能的(我已经做了一些),但是拥有可视化编辑器几乎总是一个很大的优势。但是,对于实际技术,最好使用更高级别的可用工具。在 C/C++ 上使用原始 MFC 和没有可视化编辑器的任何 GUI 编程可能真的很难。

            我建议你至少看看 GTK+ (http://www.gtk.org/) 你可以在 C++ 中使用它(也可以在 Python 和 C# 等其他语言中使用),并且在没有可视化编辑器的情况下使用它并不是很困难。如果您改变主意,它也有可视化编辑器。

            【讨论】:

              【解决方案11】:

              您需要了解特定窗口系统的 API。在 MS Windows 下,如果您要尽可能低,或者可能在 C++ 中使用 MFC,这将是 Windows API。无论如何,这是一个尝试并修复它并再次尝试并修复它的过程,等等,令人作呕。几年前我不得不在 X/Windows 下这样做,它既缓慢又痛苦。您可能想尝试一次以证明您可以做到,但根据我的经验,它既没有成效也没有必要。

              【讨论】:

                【解决方案12】:

                使用 Visio 或其他一些可编程图表工具。

                编写一个导出器,将您的绘图转换为库的 C 代码。 Win32 如果那是你的口味。

                编写此导出器的一天工作将为您节省数小时的“compile-run-checkifitswhereiwantittobe”。

                【讨论】:

                  【解决方案13】:

                  我认为设计 GUI 的最佳方式是使用 Mozilla XUL 之类的标记语言。然而,Mozilla 实现了 XUL 以与 Gecko 引擎一起使用,而不是用于原生 Windows 应用程序。这就是我在 Windows 上创建自己的实现的原因,如果您有兴趣,可以查看:XULWin

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-09-18
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-08-27
                    • 1970-01-01
                    • 2010-09-06
                    相关资源
                    最近更新 更多