Я очень долго использовал и MFC, и Windows Forms. Я из индустрии видеоигр, поэтому на протяжении многих лет мне приходилось писать много настольных приложений, а до .net MFC был чрезвычайно полезен. Еще до этого я писал инструменты на чистом Win32.
MFC определенно имел свои причуды, но в целом это сделало жизнь намного проще. Было очень легко интегрировать OpenGL и Direct3D в настраиваемые представления, и как только вы освоили их, написание пользовательских элементов управления оказалось несложным делом. Лучше всего я мог просто написать код на чистом C ++, который оказался моим любимым языком. Кроме того, я обнаружил, что MFC очень эффективный и быстрый.
Постепенно MFC начал получать поддержку библиотек внешнего управления, в частности библиотек стыковки / панели инструментов, поэтому мои инструменты, такие как средства просмотра 3D-моделей и редакторы уровней, выглядели довольно мило.
Большинство написанных мною приложений создавали пользовательский интерфейс программным способом, поэтому инструмент разметки диалогов и окон более чем соответствовал моим потребностям.
MFC 9 тоже неплох, особенно с библиотекой управления / стыковки ленты, которую Microsoft выпустила как часть Feature Pack. Так что у старой собаки еще есть жизнь! :)
Когда вышел .net 1.0, я обнаружил, что переход довольно прост, потому что он поддерживает управляемый C ++. Это было не красиво, но дало сравнительно простую динамику для .net Framework. Но переломный момент для меня наступил, когда я начал писать инструменты, которые больше нуждались в конструкторе Windows Forms, во времена .net 2.0. Я решил начать снова и изучать C #, который мне очень понравился - хотя я никогда не привыкну иметь new () без delete ();). Затем я начал писать пользовательские элементы управления, находя весь опыт очень приятным и понятным. Платформа .net была огромной, хорошо поддерживаемой, и в целом мне было проще делать практически все в C # /. Net. Кроме того, компиляция была молниеносной, а возможность рефакторинга в Visual Studio была потрясающей.
Прелесть c # /. Net в том, что вы не ограничены только написанием управляемого кода. Вы по-прежнему можете использовать неуправляемый код, например, если проблема связана с производительностью или если вам нужно обмениваться кодом между платформами. Например, мои математические библиотеки написаны на C / C ++, который я поместил в библиотеки, позволяющие C # переносить / использовать один и тот же код, хотя это только временно. Я тоже собираюсь портировать эти библиотеки на C #, чтобы все было чисто .net.
Последний опыт, который я хочу упомянуть, - это то, что последние несколько месяцев я тратил на программирование консольных игр и на программирование InterWeb. Я использовал стек Microsoft, программируя на ASP.net/C#, и должен сказать, что это очень хорошо, при этом все знания C # напрямую применимы. Единственной кривой обучения был ASP.net, а не язык и вспомогательные библиотеки. С выходом .net 3.5 (LINQ это мило) жизнь в .net Framework с C # прекрасна.
В любом случае, я не хочу превращать это в историю своей жизни, но я просто хотел кратко рассказать о человеке, который изучил все технологии, о которых вы спрашивали. Я также хотел бы отметить, что вам полезно попробовать разные языки / фреймворки. Я уже год пишу для iPhone, и теперь мне очень нравится Objective-C. Это все программирование, и все хорошо.
Что касается MFC / .net, то у обоих есть свои плюсы и минусы, и я действительно не возражаю против MFC, но с точки зрения продвижения вперед, я бы, вероятно, придерживался C # /. Net, но, пожалуйста пожалуйста, пожалуйста, поймите, как это работает. Единственная проповедь, которую я скажу, - это понять, как работает память в .net, хотя «она обо всем позаботилась о вас»;)
Ваши знания C / C ++ должны быть полностью независимыми от того, используете ли вы MFC или нет, это по-прежнему критический язык (особенно в программировании видеоигр на основе консоли), но для программирования приложений для настольных компьютеров под Windows становится все сложнее и сложнее спорить против .net. Это быстро, просто, имеет отличную поддержку инструментов, отличные сторонние библиотеки, огромное растущее сообщество, теперь кроссплатформенный (Mono) и позволит вам переключаться между всеми текущими / появляющимися технологиями Microsoft (ASP.net, WPF, Silverlight, WCF и т.д.). * * тысяча двадцать-одна
Для всего этого я все же настроил Visual Studio как среду C ++. Некоторые привычки никогда не умирают;)