Выбор между WPF, wxWidgets, Win32 API и MFC

представьте, что вы находитесь в Windows 7, и вам нужно написать графический интерфейс для графического приложения (например, редактор terrain, Mesh viewer ..) который включает в себя большое использование DirectX и OpenGL (так написано на родном C++). Если ваша цель-мультиплатформенное программное обеспечение, вы должны пойти на wxWidgets, но представьте, что вы делаете только приложение для Windows...каков будет ваш выбор? и почему?

Я предполагаю, что приложение будет работать как на XP, так и на Vista / 7 и, очевидно, в случае WPF пользовательский интерфейс будет управляться, но он будет вызывать собственные функции прокси-классом C++/CLI ( будет ли" подпрыгивание " от управляемого-родного и управляемого-родного вызывать проблемы с производительностью? ).

10 ответов


RAD Studio может также сделать работу

  • улучшено в 2010 году! VCL (визуальный Компонентная библиотека) для быстро построение Microsoft Windows приложения теперь включает в себя бесшовные Поддержка Windows 7 и изящная резервная совместимость с Windows Vista, XP и 2000
  • улучшено в 2010 году! Windows Vista и Заголовки API Windows 7 полностью использовать последние версии Windows возможности
  • новое в 2010 году! Поддержка Windows 7 В Direct2D В API

вы также можете сделать WPF с Делфи Призм и wxWidgets с twinforms


Если вам удобно с вашими навыками C++, я рекомендую WTL. Это очень легкий и приводит к бережливому машинному коду. Версия Google Chrome для Windows было написано с помощью WTL.


чтобы минимизировать время разработки и максимизировать производительность, я бы определенно пошел с Delphi 2010 (Rad Studio 2010). Вы получаете собственное выполнение, прямые интерфейсы с Windows 7 Direct2D API и, возможно, одну из лучших сред IDE/разработки, доступных в Windows 7. Чего еще ты хочешь?

Ларри Древс TheSoftwareRonin


в WPF вы можете использовать шейдеры DirectX для применения эффектов к объектам интерфейса (здесьстатья CodeProject с подробным описанием аспектов разработки), и ожидается, что поддержка этого будет продолжать расти, поэтому я бы выбрал WPF в качестве платформы разработки. Кроме того, он фокусируется на создании привлекательных пользовательских интерфейсов с разумными усилиями, и я думаю, что это очень важно для создания графического приложения.


вы можете рассмотреть возможность использования Qt, даже для приложения только для Windows, просто потому, что API Qt C++ так красиво сделано. Qt поддержка OpenGL и может использоваться в сочетании с DirectX.


будет ли "подпрыгивание" от управляемого-родного и управляемого-родного вызывать проблемы с производительностью?

определенно, но так как вы пишете просто редактор (не игра, в общем), это не то, о чем вы должны беспокоиться

приложения WPF, отображаемые подсистемой DirectX, как я знаю. поэтому, если вы используете только DirectX, это будет хороший выбор.


Я бы лично использовал http://sourceforge.net/projects/win32-framework/ для создания любых приложений на базе Windows В C++. В противном случае я бы просто использовал VB.Net или C#, потому что вы можете легко переносить код между обоими и конструктором форм очень полезно.


MFC       :: Just say NO for any kind of project.
Win32     :: Well, I can not really recommend using it.
wxWidgets :: I have used it and seen no problem, good choice.
WPF       :: I have not and never will use it as it is .Net bound.
FLTK      :: Also look at http://fltk.org/, probably has better OpenGL support.

обязательно проверьте WDL ("whittle") командой Cockos (во главе с Джастином Франкелем из Nullsoft/Winamp fame).

Это чрезвычайно легкая библиотека C++, которая включает в себя " виртуальную оконную систему WDL."

Я лично не использовал его, но я могу поручиться за отличное программное обеспечение, которое было сделано с ним. Чрезвычайно эффективные и легкие приложения.

ссылки: WDL


Я не могу комментировать wxWidgets, но WPF значительно превосходит MFC и старый добрый Win32 API. WPF использует DirectX для рендеринга, и есть некоторые поддержка 3D в WPF. К сожалению, эта поддержка все еще несколько рудиментарна и не самая эффективная. Вы действительно можете получить лучшую производительность 3D, Если вы размещаете элемент управления Windows Forms, который отображает OpenGL (по крайней мере, мы должны были сделать это в недавнем проекте, над которым я работал). Если вы хотите сделать 3D-рендеринг в приложении WPF, вы можете взгляните на структуру XNA. Следующая версия .NET framework также будет включать улучшения WPF, и я уверен, что будет лучшая поддержка 3D.