到目前为止,我所有的c++程序都在使用命令行界面,我唯一使用过的语言是PHP,它不支持gui。

我从哪里开始与图形用户界面编程在c++ ?我如何创建一个?


有很多免费的可移植GUI库,每个库都有自己的优点和缺点:

Qt 亲爱的ImGui GTKmm(基于GTK+) wxWidgets FLTK 最终的+ + JUCE ...

特别是Qt有很好的教程和工具,可以帮助你入门。享受吧!

但是请注意,您应该避免使用特定于平台的功能,例如Win32 API或MFC。这毫无必要地将你捆绑在一个几乎没有任何好处的特定平台上。


既然我已经经历过你现在的处境,我想我可以“回答”你。

事实上,制作GUI没有简单的方法。GUI高度依赖于平台和操作系统特定的代码,这就是为什么你应该开始阅读关于窗口管理api的目标平台/操作系统文档。好消息是:有很多库可以解决这些限制,并将架构差异抽象为单一的多平台API。前面建议的GTK和Qt就是其中的一些库。

但即使是这些也有点太复杂了,因为一下子引入了许多新概念、数据类型、名称空间和类。出于这个原因,它们通常与一些GUI所见即所得编辑器捆绑在一起。它们使得使用gui的编程软件成为可能。

总而言之,也有非免费的GUI开发“环境”,如微软的Visual Studio。对于那些有Delphi经验背景的人来说,Visual Studio可能更熟悉。除了微软提供的完整的Visual Studio环境,还有一些免费的替代方案:Visual Studio Express,对于开始GUI开发来说已经足够了。


我发现一个网站上有一个“简单的”教程: http://www.winprog.org/tutorial/start.html


从本质上讲,操作系统的窗口系统公开了一些API调用,您可以执行这些调用来执行诸如创建窗口或在窗口上放置按钮之类的任务。基本上,你得到了一套头文件,你可以调用这些导入库中的函数,就像你对stdlib和printf所做的一样。

每个操作系统都有自己的GUI工具包、头文件套件和API调用,以及自己的做事方式。也有跨平台工具包,如GTK、Qt和wxWidgets,可以帮助您构建在任何地方都可以工作的程序。他们通过在每个平台上使用相同的API调用来实现这一点,但是对那些向下调用本机操作系统API调用的API函数有不同的实现。

与CLI程序不同的是,它们都有一个共同之处,那就是所谓的事件循环。这里的基本思想有点复杂,很难压缩,但本质上它意味着在你的主类/主函数中没有太多的东西,除了:

检查事件队列,看是否有新事件 如果有,将这些事件分派给适当的处理程序 完成后,将控制权交还给操作系统(通常使用某种特殊的“sleep”或“select”或“yield”函数调用)。 然后yield函数将在操作系统完成时返回,您将再次循环。

有很多关于基于事件编程的资源。如果你有JavaScript的经验,它是相同的基本思想,除了你,脚本,不能访问或控制事件循环本身,或有什么事件,你唯一的工作是编写和注册处理程序。

您应该记住,GUI编程通常是非常复杂和困难的。如果你可以选择的话,实际上,将嵌入式web服务器集成到你的程序中并拥有一个基于HTML/web的界面要容易得多。我遇到的一个例外是苹果的Cocoa + Xcode +界面构建器+教程,这使得它很容易成为我所见过的GUI编程新手最容易接近的环境。


给出“以Windows XP为例”的评论,那么你的选项是:

Interact directly with the operating system via its API, which for Microsoft Windows is surprise surprise call Windows API. The definitive reference for the WinAPI is Microsoft's MSDN website. A popular online beginner tutorial for that is theForger's Win32 API Programming Tutorial. The classic book for that is Charles Petzold's Programming Windows, 5th Edition. Use a platform (both in terms of OS and compiler) specific library such as MFC, which wraps the WinAPI into C++ class. The reference for that is again MSDN. A classic book for that is Jeff Prosise's Programming Windows with MFC, 2nd Edition. If you are using say CodeGear C++ Builder, then the option here is VCL. Use a cross platform library such as GTK+ (C++ wrapper: gtkmm), Qt, wxWidgets, or FLTK that wrap the specific OS's API. The advantages with these are that in general, your program could been compiled for different OS without having to change the source codes. As have already been mentioned, they each have its own strengths and weaknesses. One consideration when selecting which one to use is its license. For the examples given, GTK+ & gtkmm is license under LGPL, Qt is under various licenses including proprietary option, wxWidgets is under its own wxWindows Licence (with a rename to wxWidgets Licence), and FLTK is under LGPL with exception. For reference, tutorial, and or books, refer to each one's website for details.


用c++创建. net Windows GUI很容易。

请参阅下面来自MSDN的教程。你可以免费下载你需要的一切(Visual c++ Express)。

当然,你把自己绑在。net上,但如果你只是随便玩玩,或者只需要一个Windows应用程序,那就没问题了(大多数人仍然有Windows…到目前为止)。


“用c++三步创建GUI应用程序”:

安装Qt Creator 创建新项目(Qt Widgets Application) 构建它。

恭喜你,你已经有了c++的第一个GUI。

现在您已经准备好阅读大量文档,以创建比“Hello world”GUI应用程序更复杂的东西。


我使用FLTK是因为Qt不是免费的。我没有选择wxWidgets,因为我的第一个测试使用了简单的Hello, World!程序产生的可执行文件为24 MB, FLTK为0.8 MB…