Есть ли еще случай для MFC

В чем заключаются привлекательные особенности MFC? Почему вы выбрали его для нового проекта?


person Aaron Fischer    schedule 23.09.2008    source источник


Ответы (14)


МФЦ был хорошим вариантом 10 лет назад. Это по-прежнему хорошая оболочка над Win32 API, но, к сожалению, она устарела.

Qt - лучший вариант с одним большим преимуществом - он не зависит от платформы. С MFC вы обречены на Windows.

person m_pGladiator    schedule 23.09.2008

Я до сих пор использую MFC для всех приложений. MFC получил плохую репутацию из-за его ранних реализаций, но сейчас он превосходен. Я также считаю, что это немного удобнее, чем WTL. Кроме того, инструменты графического интерфейса в Visual Studio уже настроены, чтобы упростить быструю разработку графических интерфейсов с помощью MFC, сопоставления элементов управления с переменными, DDX и т. Д.

Для настольных приложений, которые я планирую для широкого распространения, я по-прежнему использую собственные приложения Windows, обычно в MFC, потому что мы еще не достигли момента, когда вы можете рассчитывать на то, что ваши клиенты будут иметь версию .NET, которую вы будете использовать. установленный и попросив их установить его, вы потеряете продажи, не говоря уже о головной боли службы поддержки, когда они столкнутся с проблемами при установке .NET в результате попытки запустить ваше приложение.

person Gerald    schedule 12.10.2008
comment
Извините, адекватно, сносно - это нормально, отлично - совершенно необоснованно. Я не могу искренне назвать то, что раскрывает все возможные детали Win32, отличной абстракцией. Вы должны знать Win32 наизусть И ЗАТЕМ некоторые дополнительные особенности MFC (например, связанные с картами сообщений) - person EFraim; 03.08.2009
comment
Я почти уверен, что никогда не говорил об отличной абстракции. Он не предназначен для сокрытия деталей Win32 API, он предназначен для предоставления средств для разработки приложений, которые используют Win32 API быстрее и более единообразно, при этом упрощая прямой вызов Win32 API, когда это необходимо или удобно. Причем отлично. - person Gerald; 03.08.2009
comment
Нет, это не поможет разрабатывать их быстрее, если мне нужно разбираться во всех особенностях Win32 API. И если да, то не вижу смысла в использовании MFC. WTL или обычный Win32 API гораздо более понятны и, как правило, более адаптируемы для встраивания в логику приложения. - person EFraim; 03.08.2009
comment
Позвольте мне прояснить свою позицию по этому поводу: MFC может подойти для поддержки устаревшего кода MFC. Это может быть нормально при разработке быстрого прототипа того, что вы не хотите добавлять в другую библиотеку. (Поскольку он поставляется с VC ++). Но для разработки современных приложений с такими вещами, как диалоги с изменяемым размером (кстати, диалоги с неизменяемым размером - единственный - ненавистная вещь для меня в приложении с графическим интерфейсом - они никогда не бывают того размера, который вам нужен), закрепляемые панели инструментов - это просто не отлично. Может быть, с некоторыми хаками вроде ETSLayout. - person EFraim; 03.08.2009
comment
Если вы еще не знакомы с Win32 API, то это не для вас, но если вы это сделаете, то наверняка поможет вам быстрее разрабатывать их. Или, по крайней мере, помогает мне и многим вроде меня. Я использую Qt для большей части своей кроссплатформенной разработки графического интерфейса, но я все еще предпочитаю MFC при разработке только для Windows по той самой причине, по которой он существует; чтобы устранить множество повторяющихся ворчаний при работе с Win32 API, но при этом предоставить вам полный контроль и доступ к базовому API. - person Gerald; 03.08.2009
comment
И я не уверен, какие у вас проблемы с этим, но диалоговые окна с изменяемым размером, а также закрепляемые и / или плавающие панели инструментов - все это тривиально в MFC. На самом деле гораздо проще заставить их вести себя именно так, как вы хотите, чем в Qt или любой другой абстрактной библиотеке графического интерфейса, которую я использовал. - person Gerald; 03.08.2009
comment
Диалоги с изменяемым размером тривиальны? Теперь я действительно хочу знать, какую версию MFC вы используете. (Потому что это не так). В любом случае, у меня нет проблем с Win32 API pre se, однако я вижу, что MFC добавляет много кластерного мусора без какой-либо дополнительной ценности (на самом деле, каждый дизайн, который я мог придумать для себя, или каждый готовый инструментарий, такой как WTL подходит этот случай намного лучше) - person EFraim; 03.08.2009
comment
Вы захватываете сообщения об изменении размера / изменения размера и соответственно изменяете размер элементов управления, это несложно. У вас нет причудливых менеджеров компоновки, которые дают вам автоматическое изменение размера, но мой опыт с ними показал, что, за исключением самых простых случаев, они никогда не дают вам именно то, что вы хотите. Не могу сказать, что вижу ту неуклюжую чушь, о которой вы говорите. Есть конкретные примеры? - person Gerald; 03.08.2009

Преимущество MFC в том, что он по-прежнему лучше, чем кодирование под Win32, и вы можете распространять собственный .exe, который не требует времени выполнения 23-50 МБ, например .Net.

Теперь, если вас беспокоят эти вещи, существуют лучшие альтернативы: C ++ Builder, WxWidgets и т. Д. Но в некоторых местах не будут рассматриваться инструменты сторонних разработчиков.

person Joel Coehoorn    schedule 23.09.2008
comment
Лично я предпочитаю Win32 MFC. Я так и не обнаружил, что MFC может существенно улучшить Win32. Кроме того, есть WTL, который был довольно хорош несколько лет назад и, вероятно, уже стал отличным. - person Asaf R; 23.09.2008

Вы могли бы как бы перефразировать вопрос, почему вы выбрали C ++ вместо C # для настольного приложения. C ++ по-прежнему предлагает преимущества в скорости, которые имеют значение для некоторых приложений (я работаю в компании, которая создает программное обеспечение для электронной торговли. Скорость имеет большое значение).

Если вы собираетесь разработать настольное приложение для Windows только на C ++, то MFC - наиболее зрелый выбор, с большим количеством бесплатного кода на основе MFC в Интернете и большим количеством знаний.

person Corey Trager    schedule 23.09.2008
comment
В таком сценарии вы можете разработать логику, чувствительную к скорости, на C ++, скомпилировать ее в dll, а затем создать пользовательский интерфейс с помощью C #. - person shsteimer; 23.09.2008
comment
В торговых приложениях пользовательский интерфейс также должен быть быстрым, чтобы не отставать от цены последней сделки и т. Д. - person Corey Trager; 03.10.2008

Помимо Win32 api, MFC - единственная распространенная технология программирования для Windows, которая все еще жива и здорова в 2011 году после 15 с лишним лет. Еще в 2001 году все говорили: «MFC мертв, теперь все Winforms»; в 2005 году все говорили: «MFC мертв, теперь все в XAML»; сейчас 2011 год, и Winforms и XAML мертвы (хорошо, XAML, возможно, не совсем мертв, но уже давно прошел), а MFC все еще обновляется последними разработками (лента, расширения Aero, API Win7 и т. д.).

Конечно, это ничего не гарантирует на будущее, но за эти 15 с лишним лет было написано много кода MFC, и он будет использоваться в течение следующих десяти или десятилетий. Возможно, это не самая красивая технология, но она хорошо изучена (ее положительные и отрицательные стороны) и не является движущейся целью, как другие ажиотажные технологии, а это означает, что люди, которые действительно хотят, чтобы работа была сделана, могут положиться на нее (более того, чем на альтернативах, во всяком случае).

(то же самое и для C ++, кстати)

person Roel    schedule 15.09.2011
comment
XAML - большая часть нового материала Windows 8 (наряду с собственным кодом). Никакого упоминания MFC в // Build / keynote. Возможно, любой, кто установил предварительную версию Win8, сможет прокомментировать MFC. - person crashmstr; 15.09.2011

Вот возможность - представьте себе приложение, которому потребуется большой объем памяти, например, графическая программа, игра или, может быть, какое-нибудь высокопроизводительное бизнес-приложение. Ни для кого не секрет, что приложения .NET занимают много памяти - в таком случае вам может потребоваться экономичное приложение MFC для ядра вашего приложения. Вы всегда можете загрузить и использовать компоненты .NET, элементы управления и т. Д. Через вызываемые COM-оболочки или напрямую через C ++ / CLI.

При этом MFC - это боль. Вместо этого рассмотрите WTL - вы все равно можете вызывать .NET, если вам нужно, так же, как я упоминал выше для MFC. WTL намного лучше, чем MFC :-)

person Rob    schedule 23.09.2008
comment
Раньше мне нравился WTL в моем старом проекте. :) - person Jeff Yates; 01.10.2008

Судя по всему, это по-прежнему хороший выбор для приложений для портативных устройств на базе Windows, таких как устройства для точек продаж. В них ресурсы ограничены, поэтому такие вещи, как управление памятью, становятся более важными.

person Einar    schedule 23.09.2008

Я думаю, что нет .. MFC проиграет в

  • Уровень абстракции
  • Время разработки
  • Время устранения неполадок
  • Кривая обучения для новых разработчиков
  • Перспективы (хотя сейчас это сомнительно ... каждые 3-4 года появляется что-то новое)
  • Поиск хороших людей, знающих свой МФЦ
  • Простые в использовании элементы управления

Единственное место, где MFC, вероятно, проскользнет мимо, - это если у вас есть приложения с очень высокой производительностью, например, у вас есть вещи на экране, которые необходимо перерисовывать каждые 10 мс или 1 секунду. «Управляемые» приложения до сих пор не смогли преодолеть это препятствие.

MFC был важным шагом в эволюции, но теперь доступны лучшие варианты.

person Gishu    schedule 23.09.2008

Краткий обзор нового Функциональность MFC

Я слышал, у них есть новый элемент управления лентой. Если вам нравятся такие сложности. Вот скриншот недавно созданного приложения:


(источник: msdn.com)

На самом деле это просто обновление виджета. Так нужно ли нам больше виджетов?

person Frank Krueger    schedule 23.09.2008
comment
теперь вы знаете, на чем написан Office и чего хотят эти ребята, они получают. Синофски сказал, что следующий выпуск VS будет ориентирован на C ++, но мы увидим это, когда он появится. - person gbjbaanb; 23.09.2008
comment
Эти новые элементы управления MFC были куплены у BCGSoft, мы могли купить их в любое время. - person Aaron Fischer; 23.09.2008
comment
Аарон Фишер прав. М.С. хотел, чтобы MFC закончился. Пока не увидели каких-то ребят, пытающихся продлить ей жизнь. MS купил этих ребят. - person Bart Gijssens; 15.06.2011
comment
@HostileFork WordPad в Windows 7 и 8 кажется родным Win32, поскольку они используют Scenic UI из Windows Ribbon Framework, а не уродливую ленту MFC. - person Monstieur; 02.08.2013

Существующий Windows API полностью основан на C. Если вы хотите использовать C ++ (а вам, вероятно, следует), то MFC - это логичный выбор, если вы хотите оставаться нативным (то есть не использовать .NET).

MFC - это просто набор объектно-ориентированных классов поверх C API. Плюс немало дополнительных «вспомогательных» классов, облегчающих выполнение повседневных задач.

person Mark Ingram    schedule 23.09.2008

Только по дизайну и техническим характеристикам? Извините за категоричность, но нет. Это плохой дизайн, очень дырявая абстракция, в которой вам приходится возвращаться к программированию Win32 API, вопиющим образом злоупотреблять C ++ и твердо нацелено на вчерашние технологии: вы не получите современного (или даже привлекательного!) Взаимодействия с пользователем. приложение MFC. Если у вас есть разработчики C # и у вас нет серьезных аппаратных ограничений, используйте WinForms.

С другой стороны, внешние факторы, такие как наличие компетентности для найма, программы обучения и сторонние компоненты, могут по-прежнему продлевать срок его службы, по крайней мере, для некоторых видов приложений: небольших и простых, предназначенных для специальных приложений с относительно небольшим количеством пользователей, желательно на дому.

person Pontus Gagge    schedule 23.09.2008
comment
Вы также можете рассмотреть WTL вместо MFC. - person Rob; 23.09.2008
comment
Разве MSOFFICE до 2007 не был написан на MFC !? Это не маленькое и не простое приложение. - person Byron Whitlock; 09.12.2008
comment
@Byron: На самом деле мое самое негативное мнение о MFC состоит в том, что он предполагает, что вы пишете приложение MS Office :) На самом деле архитектура просмотра документов имеет свои достоинства, но для меньшинства (я думаю) приложений с графическим интерфейсом. - person EFraim; 31.07.2009

Если вы разрабатываете Windows CE и мобильные приложения на C ++, как уже упоминал Эйнар, MFC - хороший выбор. Если вы сделаете этот выбор, MFC также станет разумным выбором для настольного компьютера, поскольку вы можете использовать один и тот же код для настольных и портативных устройств. MFC остается хорошей производительностью / легко реализуемой комбинацией в этом сценарии. Лично я использую MFC вместе с библиотеками Stingray в этих средах, что дает очень хороший интерфейс, хорошую производительность, а также быстрое и простое внедрение.

person SmacL    schedule 12.10.2008

Я бы сказал, что скорость и занимаемая площадь - веские причины по сравнению с .NET.

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

person ChrisBD    schedule 12.05.2009

Я писал кросс-платформенный код в течение многих лет, поэтому, когда мне нужно что-то написать, у меня всегда есть очень тонкий слой абстракции между ним и системными вызовами почти для всего, кроме вызовов posix. Таким образом, вы можете запрограммировать его в MFC, но при необходимости довольно легко преобразовать его в другой API позже. Мой базовый набор библиотек C ++, которые я использую для всего, делает это с помощью небольшого класса System. В настоящее время я использую MFC для Windows, а также использую XWindows для Linux и собственную версию для Mac. А потом, когда я портирую его на КПК, это должно быть безболезненно.

Если вы хотите взглянуть, это LGPL и находится по адресу:

http://code.google.com/p/kgui/

person KPexEA    schedule 23.09.2008