Writing GUI apps for Windows is painful

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • ComLightInterop

    Cross-platform COM interop library for .NET Core 2.1 or newer

    I do not recommend C++ CLI.

    Can you elaborate on why?

    I looked at various ways for interop between C# and C++ over the years, and overall found C++/CLI to be the best overall for our particular application types: it's a separate layer bewteen a C++ backend (which is also used in other non-gui applications), with a windows-only WPF desktop application on top. Mainly because the C++/CLI code itself is simple, readable and fairly effortless to write and maintain. A bit repetitive at times though. Integration on the C# is seamless, with code completion etc, and C# interfaces can be implemented in C++/CLI directly for instance. The initial setup takes some work but with conversion between common types implemented (ability to e.g. IEnumerable <-> std::vector or std::iterator etc) it's all pleasant and good.

    or check this library of mine https://github.com/Const-me/ComLightInterop/

    Gotta say this looks neat, but it's exactly the type of code I'd rather not write: UUIDs, bunch of macros, unclear mapping beetween return types (HRESULT vs bool), having to declare same interfaces both in C++ and C#, ...

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • Windows UI Library

    Windows UI Library: the latest Windows 10 native controls and Fluent styles for your applications

    Supposedly is being worked on for making it more Native AOT friendly.

    How we got into this mess? WinDev and DevDiv politcs.

    After the Longhorn debacle, its technologies landed on DevDiv, like WCF and WPF.

    Sinofsky and friends never were that keen in having .NET coming into their turf, it is no surprise that Hilo sample for Windows 7, then praises COM and C++ for Windows applications[0][1].

    Then coming in this path, WinRT came to be, with roots as how .NET was being designed, before Microsoft decided to pivot it as another Java like technology[2].

    A bunch of folks in WinDev, weren't happy with C++/CX, so they united to replace it with C++/WinRT, because extensions, when clang and GCC are full of extensions, promised to give back a C++/CX like developer experience in 2017[3], never delivered, went to have fun with Rust/WinRT.

    Now C++/WinRT is in maintenance mode[4], and Rust/WinRT never took off, and is now Rust/windows-rs[5].

    As paying customer, impacted by those childish attitudes, I would have had the whole team fired.

    Finally, check the amount of bugs and complaints on their respective repos,

    https://github.com/microsoft/microsoft-ui-xaml

  • slint

    Slint is a declarative GUI toolkit to build native user interfaces for Rust, C++, or JavaScript apps.

    I'm working on a GUI toolkit that should match the requirements: Slint - https://slint.dev

  • As of Sciter and "antialiasing" issues mentioned in the article...

    Author did not enable high-DPI support in his/her application.

    Either in Visual Studio : https://sciter.com/wp-content/uploads/2024/06/high-dpi-aware...

    Or by including proper manifest: https://gitlab.com/sciter-engine/sciter-js-sdk/-/blob/main/d...

  • imgui

    Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

    It's even worse.

    > Those were only a few options that I considered. After a very long time trying out all sorts of different libraries and at one point even writing my own MFC styles, I figured out that for simple apps there is simply nothing better suited than Dear ImGui.

    They decided to go with the option that deviates the most from the standard Windows UI because there are no native controls at all and it's a nightmare for accessibility (see https://github.com/ocornut/imgui/issues/4122). I use it for prototyping privately, but I'd never make anything I want to release into the world with it.

  • winforms

    Windows Forms is a .NET UI framework for building Windows desktop applications.

    Apps developed for the modern (open-source) version of .NET may be compiled to a native code (NativeAOT). Some time ago, I tried AOT on a simple WinForms project and it worked. Unfortunately, functions using COM APIs are not yet supported (as they rely on reflection). There is an ongoing effort to fix this problem: https://github.com/dotnet/winforms/issues/4649

  • go-sciter

    Golang bindings of Sciter: the Embeddable HTML/CSS/script engine for modern UI development (by AdguardTeam)

    1. These wrappers are Open Source.

    2. I do not have customers that requested either one of these wrappers.

    3. Customers that do use one of wrappers, as AdGuard for example, maintain their own version of Sciter/Go: https://github.com/AdguardTeam/go-sciter

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  • Examples_FLTK

    Shows how to use Fltk controls only by programming code (c++17).

    I've used FLTK for an application. It relies heavily on opaque pointers and convention. The compiler will not help you out if you mess up.

    https://github.com/gammasoft71/Examples_FLTK/blob/c6f630eaa3...

  • ProjectReunion

    The Windows App SDK empowers all Windows desktop apps with modern Windows UI, APIs, and platform features, including back-compat support, shipped via NuGet.

  • cppwinrt

    C++/WinRT

    https://github.com/microsoft/cppwinrt/

    And then compare with Project Reunion vision from 2021, and where we are three years later

    https://blogs.windows.com/windowsdeveloper/2021/03/29/announ...

    Mainly because along the way, as if those changes weren't enough, they also decided to reboot their initial approach with Project Reunion, WinAppSDK took another route, and here we are.

    This is only a short overview of how WinRT went down since Windows 8, thus only those that never advocated for it, can honestly suggest WinUI, as they lack the background of how chaotic it all is.

    [0] - https://devblogs.microsoft.com/cppblog/announcing-hilo/

  • windows-rs

    Rust for Windows

  • furnace

    a multi-system chiptune tracker compatible with DefleMask modules

    There is also furnace[0] and mmlgui[1]. Which are recently developed programs that people have been using to create chiptune and music for retro video game consoles. Including being used by Yuzo Koshiro.

    [0] https://github.com/tildearrow/furnace

  • mmlgui

    GUI for ctrmml

  • win32-custom-menubar-aero-theme

    Custom owner menubar drawing for win32 even with aero themes using undocumented Windows messages and structures, previously unknown.

    Check out my win32 dark mode menu bar in case it comes in handy.

    Also I know far far too much about the internals of classic win32 rendering if you have questions

    https://github.com/adzm/win32-custom-menubar-aero-theme

  • tauri

    Build smaller, faster, and more secure desktop applications with a web frontend.

    Tauri[0] is another HTML/CSS/JS-converter that generates small binaries by relying on the presence of WebView. Works pretty well.

    [0] https://tauri.app

  • Godot

    Godot Engine – Multi-platform 2D and 3D game engine

  • neutralinojs

    Portable and lightweight cross-platform desktop application development framework

    I've been eyeing https://neutralino.js.org/ since if I'm going to make the app render right on browsers then relying on the same code via webviews likely isn't (much) more portability effort.

  • FLMH

    Single header FLTK Modern Helper

  • explorerplusplus

    Explorer++ is a lightweight and fast file manager for Windows

    I have a reasonably complete implementation of dark mode in my open source application, Explorer++. It uses the standard Win32 controls and applies a variety of strategies to get something that looks more-or-less coherent when dark mode is enabled. ThemeManager.cpp[0] contains the bulk of the functionality. It could be useful as a reference for how you might create a dark version of a standard Win32 control.

    [0] https://github.com/derceg/explorerplusplus/blob/4bad3ab95d87...

  • Cgml

    GPU-targeted vendor-agnostic AI library for Windows, and Mistral model implementation.

    > Can you elaborate on why?

    The language is only supported in a single compiler, and is specific to Windows.

    The language is based on both C++ and .NET runtimes, and when I used it (admittedly, it was many years ago) I didn’t like the usability consequences. These two runtimes interact in a weird way. It’s hard to compose data structures which contain both managed and unmanaged pieces, see that question https://stackoverflow.com/q/10523268/126995 You can’t include Windows SDK headers in CLI code, not gonna compile: https://stackoverflow.com/q/26502283/126995 Same applies to most third-party C and C++ libraries.

    So with CLI you have 3 languages instead of just two: C#, C++/CLI, and classic C++.

    > it's exactly the type of code I'd rather not write

    I have used that library in multiple projects in the last 5 years, for Windows and Linux platforms including ARM Linux, both open source and commercial. It worked great for my use cases.

    Here’s an open-source example of a relatively complicated COM interface implemented on top of ComLightLib.

    C# interface: https://github.com/Const-me/Cgml/blob/master/CGML/CgmlNet/iC...

  • SingleExeXamlIsland

    This can be solved by hooking system dll, see my project: https://github.com/ysc3839/SingleExeXamlIsland

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • Which GUI toolkit for Rust today.. few questions...

    8 projects | /r/rust | 22 Apr 2023
  • Rust GUI framework

    16 projects | /r/rust | 8 Feb 2023
  • Rust: State of GUI, December 2022 – KAS blog

    15 projects | news.ycombinator.com | 14 Dec 2022
  • Are we GUI Yet? The state of building user interfaces in Rust

    8 projects | news.ycombinator.com | 9 Jul 2021
  • State of the Windows: How many layers of UI inconsistencies are in Windows 10?

    5 projects | news.ycombinator.com | 18 Jun 2021

Did you konow that C++ is
the 6th most popular programming language
based on number of metions?