Сложный вопрос по WPF, Win32, MFC

предположим, вы ИТ-студент с базовыми знаниями C++ и c#. Предположим, вы хотите создавать приложения, которые:

  1. необходимо обеспечить некоторую производительность, как архиваторы, криптографические алгоритмы, кодеки
  2. используйте некоторые системные вызовы
  3. есть gui

и вы хотите узнать Api, который позволит вам писать приложения, подобные описанным ранее и:

  1. - это мейнстрим
  2. is будущее
  3. дает вам право найти достойную работу
  4. достаточно легко - я имею в виду легко, как VCL, а не просто, как winapi

Итак, делая эти предположения, какой Api вы выберете? MFC, WPF, другие? Мне очень нравятся VCL и QT, но они не являются основными, и я думаю, что немногие работодатели захотят, чтобы вы писали приложения в QT или Visual C++ Builder...

Спасибо за ответы.

2 ответов


Примечание: следующий ответ был написан несколько лет назад с учетом разработки настольных приложений. Сегодня (в 2018 году) вы, вероятно, просто создадите веб-приложение, чтобы получить что-то разумно кросс-платформенное и независимое от устройства. (Например, использование ASP.NET ядро на стороне сервера в сочетании с UI framework / library, например React, Vue.JS, или угловой на стороне клиента).

  • Win32 API - Я забудь об этом, на твоем месте. Программирование приложения Windows непосредственно через Win32 API имеет смысл только в том случае, если вы программируете на чистом C, или если вам действительно нужно сделать много системных вызовов, или если вы обеспокоены дополнительными накладными расходами, введенными более "удобными" платформами или фреймворками (например, названными ниже). Программирование UIs непосредственно через Win32 API утомительно, грязно, и вам нужно иметь дело с большим количеством деталей. Это не зависящий от платформы, но вы это может волновать, а может и не волновать.

  • MFC - возможно, вариант, если вы программируете на C++ и закреплен на платформе Windows. Я никогда не понимал, что в этом такого хорошего, кроме того, что это делает Win32 API намного более удобным (AFAIK это в основном коллекция объектно-ориентированных оболочек вокруг Win32 API, которые забирают часть его сложности / беспорядка). Кроме того, это также не очень платформо-независимый.

  • Qt, wxWidgets, в -- довольно распространенные фреймворки пользовательского интерфейса. Могут быть хорошие варианты, где независимость платформы играет определенную роль. AFAIK обе структуры ориентированы на язык C++.

  • WinForms (.NET) -- подобно MFC, это также основано на Win32 API (USER32 и GDI+). AFAIK структура WinForms теперь портируется на Mono, и поэтому несколько кросс-платформенный. Однако это не самая современная технология. Для сложных UIs он также может быть несколько вялым иногда. Если бы я должен был решить сегодня, какую структуру использовать, я бы предпочел выбрать...:

  • WPF (.NET) -- более современный, чем WinForms, с более графическими возможностями и, по-видимому, более быстрым рендерингом, поскольку он больше не основан на Win32 API (GDI). (И он работает на .NET, для которого я нахожу отличную платформу для разработки. Программирование на C# так много проще, чем программирование на C++ IMHO, что также является аргументом против Win32 API, MFC, Qt и wxWidgets.) Обратите внимание, что WPF не является кросс-платформенным, он существует только на платформе Windows до сих пор.

  • тогда, конечно, есть Java, включая фреймворки UI, которые поставляются с ним. Я не могу много сказать об этом, так как я не являюсь человеком Java, но я мог бы представить, что Java будет лучшим выбором для независимости платформы; и это доминирующая платформа (над .NET) в некоторых отраслях (например, мобильные телефоны, банковское дело, из - за очень твердых СПМ и соображений безопасности).

Так моя рекомендация будет .NET и WPF для интерфейса если вы планируете остаться в основном в мире Microsoft. Помните, что вы все еще можете использовать Win32 API (вы не приблизитесь к "системным вызовам", чем это) через P/Invoke.


Если вам нравится кодирование на C# и работа с .Net framework, я бы рекомендовал вам взглянуть на WPF. WPF-отличная платформа GUI, где вы можете делать что угодно, а также сиять! WinForms может быть проще понять, но я бы сказал, что WPF-это больше "будущее доказательство". Еще одна положительная вещь заключается в том, что WPF действительно похож на Silverlight, поэтому, если вы хорошо справляетесь с WPF, вы также сможете писать приложения Silverlight - если это интересно. Пожалуйста, не потрудитесь изучить MFC.. Я не могу поверить, что есть много, которые используют MFC сегодня по другим причинам, чем то, что они использовали его раньше, и не получили возможности измениться..

есть много хороших рабочих мест для программистов .Net, поэтому возможность обрабатывать некоторые рамки GUI в дополнение к C# и общим знаниям о .Net framework будет стоить.

когда дело доходит до ваших точек о возможности " доставить некоторую производительность, как архиваторы, криптографические алгоритмы, кодеки" это действительно не должно зависеть от вашего выбора GUI framework. Этот вид кода будет записываться слоями вне слоя GUI и, как правило, будет привязан к GUI. С WPF вы напишете свои, например, криптографические алгоритмы на C# в некотором классе, независимо от уровня GUI, а затем представление, написанное в WPF, будет привязано к коду C# и получит ответ отсюда. Однако, если вы использовали WinForms, вы все равно сделаете то же самое, и производительность зависит от алгоритмы - не GUI.

когда дело доходит до начала работы с WPF, есть много вопросов о том, как помочь с этим. Так что вы должны найти хорошую помощь с быстрым поиском.

удачи!