Common controls, especially shell controls, come in different versions of comctl32 etc. and have been versioned and dynamically selected in the basis of things like application manifests for backward compatibility reasons for a long time.
https://docs.microsoft.com/en-us/windows/desktop/controls/co...
API structures have different sizes so code usually needs to change to support later versions.
Seriously though, why were the fonts hard-coded to use ms sans serif instead of the OS default font (eg Segoe UI last time I checked?)
I may hate their practices but their dev tools have always been absolutely top-notch within their (locked down) garden. No company has ever come anywhere close to emulating that, closed garden or not.
Seriously I have tremendous respect for anybody who works on a project that massive, I just meant it in the sense of "there are two kinds of languages, the kind people complain about and the kind nobody uses".
Of course there were a lot of jagged edges in winforms (like the font thing) - I never used a GUI framework that didn't have any of those.
Lots of stories, here's some quickies:
- Windows Forms was originally WFC from the Visual J++ project. Anders Hejlsberg was the architect as one of his first MS roles, working with him was a huge impact on my career.
- The Winforms team was, I think the first team to ever use C#, which was called COOL (C-Like Obj Oriented Language). Before then we were using a Java-like language that ran on the CLR
- The .NET Framework originated as a mash-up of the Winforms and ASP.NET teams, who were busy building frameworks separately for a while.
- The .NET project was a boiled ocean - everything was new from the runtime (CLR) to the tool (VS.NET), and two languages (C#, VB.NET). We didn't have a working debugger until late in the cycle, everything was always on the floor. This might be an anti pattern.
- I don't remember exactly what the story was with the font...20 years!... but my guess would be that it had to do with dealing with different versions of Windows and which fonts were installed.
The PropertyGrid was quite lovely. I dimly remember being envious of Visual Studio having that cool no-frills edit-my-object widget and it wasn't initially available as part of the forms lib, but iirc there was some trick you could do to use it... I tried once but gave up on the learning curve because it was so designed for object properties and I wanted to use it to manipulate a datarow. I assume it got a more line-of-business-developer version in its later incarnations.
WPF just came at the wrong time, as mobile was about to ascend and added complexity (which I'll admit can definitely add to correctness). Given hindsight, they should've just extended WinForms in some way. Leaving more complex needs than whatever that extension entailed to the Win32 API. UWP is fine and would be the greenfield target, but being Windows 10-only makes it a nonstarter at any enterprise I've worked at. So it's WPF/UWP that are essentially dead to me. Once Windows 7 is completely abandoned, I'll change my tune and stop promoting WinForms and go with UWP. But not today.
I'm all about building out on WinForms, or while not a UI framework, Blazor. The latter of which is part of an application/UI rewrite that we're looking to do for a WinForms app that I maintain, once it hits 1.0.
WinForms does the job and it allows me to almost entirely focus on the business logic.
WPF was designed to merge the best of client with what was happening on the web at that time. Data binding, declarative layout, model-view separation, these are all much better BUT you're also left dealing with styling, transitions, other stuff. WPF is clearly more powerful (I also worked on Silverlight fwiw), but takes more skill to operate.
We were targeting the VB6 user who was creating LOB apps at a big enterprise and wanted to get things done and move on.
Instead, I'd rather have seen a path that led to just WinForms and UWP today. If you read the link that I provided, the author feels the same. WPF is the most pointless of all three. If you want XAML, there is UWP and it's more useful, and has a better future. It's hard to imagine much of a future at times for even UWP with Electron's popularity and HTML/CSS web interfaces.
It's clear that Microsoft is gearing up for massive Electron optimization with their adoption of Chromium, so that's going to just accelerate as those apps run better and use less battery while doing it.
For me, native GUI might just die with WinForms. I'd hate to see it go, it's always going to remain ideal for internal tools.
WinForms is the original and best... and I think the only widget kit from it's generation still around and maintained
The part that you are referencing was part of the CLR (nee COM+) organization. This native compilation didn't happen for a couple of reasons:
1. Serviceability - the idea was that we wanted to be able to roll out new assemblies with fixes (remember this was in the "oh shit" phase of security awareness at MS)
2. Optimizations - there was an idea that you wanted different JIT to happen based on end machine architecture, server vs client, etc.
3. Size - at this point the size of the resulting binaries (for distribution) was still a concern. At that point it seemed better to have fat frameworks updated by Windows Update, and smaller apps that depended on that.
Many of these reasons seems less compelling now. MS was often a bubble in those days. I left in 2012 but it seems better now and it shows in their products.
I was there during the early days from the customer side, my employer was one of the selected MSFT Partners to get access to the pre-betas as a way to provide early feedback and be in the position to announce .NET based products on .NET 1.0 launch day.
Still remember all the .NET early docs full of red paragraphs, WIP sections or big warnings that some areas were still in the process of being fully defined and subject to change.
I always love to hear these stories.