Best C++ GUI libraries for Windows

Disclaimer: the list contains the library that I use (FLTK) and the libraries that I have evaluated/ am evaluating for future use (i.e. I have at least compiled the demo version). It is by far not a complete list of all the libraries. But if you have suggestion, please write them in the comment or email me, as I will constantly be updating this page.

FLTK

FLTK (Fast Light Toolkit, pronounced “fulltick”) is the library I currently use in one of my projects. It is a cross-platform GUI toolkit (that is, has more features than the mere GUI library) and runs on Linux, Windows, and MacOS. It supports 3D graphics via OpenGL and has its own built-in GLUT emulation.

It is stable and reasonably well-supported. Current latest stable release, FLTK 1.3.5, was released on March 3, 2019 (as of today, September 1, 2020) but the last activity on the Git report was today, with 38 commits and 2 pull requests merged in the last 30 days.

My perception is that it is a GUI focused more on functionality and ease of use, rather than on aesthetic. I started using it because it was the suggested GUI in one of my courses at University of Bologna, but I have to admit that going from the example file to the interface of my project was pretty trivial, that is why I stuck with it.

The source code and the manual can be found at the www.fltk.org website.

FLTK 1.3.5 GUI Example of a FLTK 1.3.5 GUI (source: https://www.fltk.org/shots.php)

Dear ImGui

ImGui stands out of the pack because it is a GUI for building a GUI. Unlike the others, it is heavily aesthetically oriented and allows you to create visually compelling interfaces. Designed to build games and real time applications, it is versatile enough to be used also in applications.

And, also unlike the others, it is a pure GUI and does not handle complementary aspects such as handling windows, input-output events like keyboard or mouse, fonts, OpenGL rendering, etc. ImGui only provides a stream of graphic objects that will be rendered by the rendering engine of your choice (usually OpenGL). The documentation suggests to use ImGui it in conjunction with a back end library that handles that, and interfaces are provided for AGS / Adventure Game Studio, Amethyst, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium, GLFW, GML/Game Maker Studio2, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, NanoRT, Nim Game Lib, Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, px_render, Qt/QtDirect3D, SDL2, SFML, Sokol,
Unreal Engine 4, vtk, Win32 GDI (the one suggested by them are highlighted). Their examples are created using GLFW.

Here is the output I got from compiling their example:

ImGui Library Example code provided with the ImGui Library.

but on the library website you can find plenty of screenshots of project GUIs created with ImGui, both non-graphical:

ProDBG user interface created with ImGui. ProDBG user interface created with ImGui. ProDBG is a multiplatform debugger. Here is shown a C64 backend connected to the VICE emulator. Source code here: https://github.com/emoon/ProDBG . Screenshot from Daniel Collin https://github.com/emoon

and with heavy use of graphic:

Created using ImGui. Credit to Bruce Lane Created using ImGui. Credit to Bruce Lane

ImGui code can be found a their GitHub repository https://github.com/ocornut/imgui , that also hosts the Wiki with the library’s documentation and tutorials at https://github.com/ocornut/imgui/wiki.

wxWidgets

wxWidgets is a C++ library/framework that lets developers create applications for Windows, macOS, Linux and other platforms with a single code base. As far as I know, it is the only GUI library that is available for C++, Python and Haskell, making it easy to switch between the two languages. Some suggests that wxWidgets has advantages over Tkinter, the default GUI distributed with Python, but I have no direct experience with the two.

The most relevant projects using wxWidgets is Audacity, a free audio editor and recorder for Windows, Mac OS and Linux:

Audacity interface developed using wxWidgets. Audacity interface developed using wxWidgets.

and KiCad, a widely used open source application for designing electronic schematic diagrams and PCBs:

KiCad interface developed using wxWidgets.

wxWidgets is very stable (has been around since 1992) and has a very active community. The latest stable release is 3.0.5 (as of today, September 1, 2020), published on April 27, 2020. The source code can be found at their https://github.com/wxWidgets/wxWidgets repository.

C++ 

See also