I develop rich client software on Mac OS X and Linux. I wish to port an application to Windows and not being a user of Microsoft products, I'm not very familiar with Windows in general.
What I'm familiar with:
On Mac OS X, I have the option of Cocoa and Objective C or Carbon and C/C++. On Linux, I have the option of GTK+ and C/C++ or Qt and C++. I prefer Cocoa on Mac OS X and GTK+ on Linux. Interface Builder for Cocoa and Glade for GTK+ make my life easy. It's fun to create rich clients in these operating systems.
My core classes, or "model" in MVC, is written in cross-platform C++. The user interface classes, or "view and controller" in MVC, is written in the "preferred" language and GUI API for each respective platform.
C++ is the language I'm most familiar with. I use the Boost libraries extensively. Especially smart pointers, threads, and asio networking libraries. For Unicode, Localization, etc., I use International Components for Unicode (ICU).
Question 1: What is the "preferred" language and GUI API for the Windows platform that's compatible with my cross-platform model classes?
Question 2: How do I access my cross-platform model classes?
For example, on Mac OS X, I access my model classes through controller classes. The controller classes are implemented in Objective-C++. Objective-C++ is a mix of C++ and Objective-C. View objects "talk to" controller objects in Objective-C while the controller objects "talk to" model objects in C++.
On Linux, all classes are implemented in C++.