It’s easy to forget that, before the mid-1990s or so, virtually all development was PC-centric. That’s a sea change from today, where virtually all development involves a web component of some sort. This is all to the good: it’s much easier to build, maintain, and support a web application than one trapped on local desktops and laptops.
But desktop development is far from dead, especially in the context of Microsoft and Windows. Let’s explore a handful of Microsoft technologies in play: Win 32 API and C++, Winforms, WPF, and UWP.
Win32, the 32-bit programming interface for Microsoft’s APIs, has been around forever: Visual C++, Delphi and Visual Basic all used it; many of the graphical APIs, such as Qt, SFML, glfw, and SDL, use it under the hood. If you’re interested in exploring what Win32 can do for you, Microsoft offers a copious amount of documentation (including a C++ walkthrough) via its own site; you’ll build your first Windows program and go from there.
Winforms is short for Windows Forms .NET, and has been around since the .NET Framework appeared, along with C#/VB.NET; it was open-sourced in 2018. Although quite long in the tooth, if you want to create a simple application, then WinForms is the fastest and easiest way. As with Win32, Microsoft offers its own tutorial and training materials via its site.
Winforms lets you create sophisticated Windows desktop applications (so long as you're happy with Win32 graphic)s. You're not limited to C# either, as VB.NET can also be used. Winforms uses Forms and Controls to build the UI. If you were a Visual Basic developer, you’ll feel right at home with Winforms.
Despite the .NET Framework finishing with version 4.8, Winforms continues in .NET. You'll find that the Visual Studio form editor is not quite as polished as it was with .NET Framework; this is because Visual Studio was built for the .NET Framework, but the form designer runs in .NET Core (now just called .NET). Switching between the code and form editor can present problems, even with the latest version of Visual Studio.
This is another old technology that hasn’t really set the world on fire despite being 15 years old. Windows Presentation Foundation (WPF) has been the modern way to create desktop apps since 2008. This is based on XAML, a declarative form of XML used for building the user interface. XAML typically looks like this (but can get a lot more complicated):
Here’s an extensive breakdown if you want to explore what WPF can do for you. WPF lets you build more complicated graphics in your applications than with Winforms. The Direct3D library is used by WPF to give pixel-accurate graphics; it also makes use of vector graphics, which scale without issues and uses your system's GPU to render screens. The only downside is there's a bigger learning curve with WPF than Winforms. You can use templates to create controls and bind fields to other controls or data items.
XAML isn’t just for WPF applications. If you do mobile development, you'll come across it in Xamarin Forms and its successor MAUI. But let's stay with desktop development.
Things have become a little bit confusing with the introduction of .NET Core and its successor .NET. Back in 2015, Microsoft introduced the Universal Windows Platform (UWP). You could develop software to run on it in C++, C#, VB.NET and XAML. Until 2019, though, you couldn't run Winforms or WPF applications on it. UWP Bridges allowed API calls for Android, iOS, Windows desktop apps and even Silverlight—but UWP received a bit of a “meh” reception, especially for games.
Back in 2020, Microsoft brought out .NET 5, which was the unifying release letting you develop for Windows, Linux, Mac, Android and iOS. Winforms and WPF are still available only on Windows platform. There’s a new version of .NET each year around November—.NET 7 is the current version, but .NET 6 was an LTS version and supported for three years. The next LTS version will be .NET 8, coming out later this year.
May 2022 saw the launch of .NET MAUI short for Multi-platform App UI. This lets you create code in a single project that can run on Windows desktop, Android, iOS, Mac and Tizen (Samsung OS). It's based on WPF, and XAML is used throughout.
Windows App SDK
One concern for desktop development is the lifetime of new Microsoft technologies. They are sometimes deprecated within a few years. It happened with Silverlight and it's happening to UWP.
If you are developing for .NET Framework, then your choices are simpler: Winforms or WPF. You can create Flutter apps to run on Windows desktop as an alternative to Microsoft technologies. Then there’s Avalonia UI, a cross-platform open-source XAML Framework; the GitHub Awesome Avalonia repository has quite a collection of open-source libraries and resources.