Remix.run Logo
▲ lolpanda 5 hours ago

In 2026 does it still make sense to build new Windows app using Win32 API? I was building a simple image viewer similar to QuickLook on Mac using Win32. I found it's very responsive. The code is less readable compared to React. For me Win32 is a good option if the UI state machine is simple enough.

▲Scharkenberg 2 hours ago | parent | next [-]

While Win32 tends to deliver the most resource-efficient and responsive apps if the complexity is not high, I have settled on the latest .NET + C# + Windows App SDK / WinUI 3. Making an app look good and fit into the modern Windows look is extremely hard with Win32 C/C++ and writing and maintaining it requires energy that I'd rather spend elsewhere. Besides, modern frameworks are making great strides in speed, efficiency and QoL features. .NET 11 is full of optimizations, for example.

▲lloydatkinson 2 hours ago | parent [-]

I've tried this and found the WinUI deployment model frustrating and user hostile. There are like 5 open issues on GitHub where people seem deeply confused (I'm one of them) as to if it's possible to build a plain .NET .exe. Some people have tried it and it "works", others try it and get obscure errors, it's a real mess.

▲okanat 4 hours ago | parent | prev | next [-]

I think the sweet spot is WPF or actaully its FOSS version: AvaloniaUI. It is high level enough to be cross-platform and not stupidly verbose, however it is rather light pn resources. However, Win32 still wins in absolute minimalism.

▲keithnz 3 hours ago | parent | prev | next [-]

yeah, it's still pretty good for a lot of things. I've found with AI it's now super easy to do native win32 apps really easily. It used to be doing all the plumbing was a PITA. There were wrappers to make it easier, but now you can do it directly. It means you get super performant, tiny binaries, that start instantly. Like windows should be. However, at home I've moved to linux a while back so way less useful to me now, though works fine with WINE. I still use it to make little utilities for work though.

▲chuckadams 4 hours ago | parent | prev | next [-]

Unless your name is Raymond Chen, you probably want to at least use ATL/MFC, which are frozen but still supported. Me, I'd take Qt any day, or wxWidgets if I wanted to go minimal.

▲adzm 4 hours ago | parent | prev | next [-]

Win32 API is great and responsive; ATL/WTL (and MFC) are still very useful abstractions with little cost. The biggest pain point is having to handle a lot of things manually, like DPI awareness (and themed controls). Even things like Emoji and other modern text features are not available through GDI and require DirectWrite iirc. Still, I'm surprised how useful it manages to be regardless how old it is.

▲NetMageSCW 3 hours ago | parent | prev | next [-]

I would say WinForms in C# is still the best today.

▲the__alchemist 5 hours ago | parent | prev | next [-]

I wouldn't, because I do not think we should put up barriers in our application between OSs (Nor have to maintain separate UI code bases for each OS you think might use it). So I use cross-platform kits. There are compromises, but I don't care about the looks native qualification compared to works anywhere. Yes, the software looks like an EGUI app (etc. Substitute Qt), instead of Looks native, but I appreciate how I'm not setting up barriers between OSs or making extra work.

▲NetMageSCW 3 hours ago | parent | next [-]

So instead you are creating a bad UI for all of your users. That’s very Java application (or perhaps Electron these days) of you, but seems like a poor trade-off to me.

▲the__alchemist 2 hours ago | parent [-]

Could you please clarify why you think cross-platform means bad UI?

▲Doohickey-d 4 hours ago | parent | prev | next [-]

These days, with LLM assisted development, with relatively simple GUIs, I would go towards platform native GUIs per platform. And then all the shared business logic goes in a shared "core", with the GUIs only serving as "dumb" inputs and outputs, with all business logic shared between them.

LLMs are quite good at tedious tasks such as keeping multiple GUIs in different languages in sync with each other.

▲Rohansi 2 hours ago | parent [-]

You still need to test all of those separate GUIs though so it's still costing more.

You also generally don't want them to actually be in sync because there are actual UX differences between platforms that you need to align with to really be native. If you don't follow that then what's the point?

▲floydnoel 4 hours ago | parent | prev | next [-]

I couldn’t disagree more, when it comes to UIs. They should match the platform they are being used on. Cross-platform always produces a very sub-par experience. But us developers tend to care primarily about what makes development easiest for us.

▲Rohansi 3 hours ago | parent | next [-]

Not everyone has the resources to build five or six different UIs.

▲the__alchemist 3 hours ago | parent | prev [-]

What does this mean in practice for software you write? What OSes to you build it for, and what OS or GUI-specific conventions to you follow which don't apply to others?

edit: Link software you wrote's installation instructions.

▲jen20 4 hours ago | parent | prev [-]

I also don't care how if things _look_ native, I care if the work like a native app. For example, on the rare occasions I touch Windows, I expect standard keyboard shortcuts to work. On macOS, I expect full integration with the accessibility frameworks and OS affordances like services.

A lowest common denominator idea of "everywhere" is just not that useful.

▲the__alchemist 2 hours ago | parent [-]

How do you handle this for your own software? Could you please link me to one of your project's websites and install instructions? What specifically do you find that one OS has that's mandatory for a good/native UIs that others don't?

I hear you on the native UI is better all things considered. I'm trying to figure out how that works in practice. I.e., to accompany a "cross-platform UIs are inferior to native ones", you would be effective to also include the workflows you use. In a realm where you choose options, eliminating one should come with illuminating another, as one must choose a path, and others could be eliminated for their drawbacks as well, leaving none available. What is your path here?

▲jim180 5 hours ago | parent | prev | next [-]

I am having a blast with AI + C + WinAPI. The responsiveness of WinAPI is awesome

▲toast0 4 hours ago | parent | prev [-]

I mean, if I was building a windows app, I would. Microsoft always tries to convince people to stop using it, but Win32 keeps working.

If Microsoft ever makes something that actually meets all the needs that Win32 addresses, they'll probably build a compat layer and a) your win32 code will still work in compat mode, b) that new thing may be worth targeting.