VIII Международная студенческая научная конференция Студенческий научный форум — 2016
СРАВНИТЕЛЬНЫЙ АНАЛИЗ ГРАФИЧЕСКИХ СИСТЕМ WPF И WINFORMS
Windows Forms – графическая система в составе .Net Framework. Представляет собой обертку вокруг Win32 API в управляемом коде. Считается заменой графической системы MFC, написанной под C++ и имеет сложную модель для разработки интерфейса программного продукта.
Windows Presentation Foundation – это графическая система в составе .Net Framework 3.0 и более поздних версий. Спроектирована под влиянием технологий HTML и Flash и использует аппаратное ускорение.
Изменения графических систем отображения Windows
Разработка графического интерфейса для Windows-приложений основывается на двух компонентах операционной системы:
User32 – содержит основные элементы окна;
GDI/GDI+ — предоставляет функционал для рисования фигур, текста.
Эволюция графических систем прошла путь от сложной системы MFC до разработки на языках .Net и WinForms. Но как бы не совершенствовались технологии разработки, они всё равно опирались на User32 и GDI/GDI+, а значит, не смогли преодолеть фундаментальные ограничения базовых компонентов.
Для решения этой проблемы была разработана технология WPF. Её главное отличие от WinForms в том, что для отображения графических компонентов используется не GDI/GDI+, а DirectX – технология, разрабатываемая Microsoft для создания игр в тесном сотрудничестве с изготовителями видеокарт, и по этой причине имеет поддержку аппаратного ускорения.
И хоть от компонента User32 не отказались, его использование сводится к задачам не касающихся отображения графического интерфейса, например, определение положения окна. Все задачи, связанные с рисованием возложены на DirectX.
Преимущества WPF
Переход к DirectX представляет собой огромный шаг в развитии и, априори, предоставляет такое превосходство перед другими графическими система как аппаратное ускорение. Однако, WPF обладает и рядом других преимуществ, которые так же повышают его привлекательность для разработчиков.
Рассмотрим наиболее существенные изменения:
Аппаратное ускорение. Как уже было сказано, DirectX разрабатывался в сотрудничестве с изготовителями видеокарт. Однако, просто мощной видеокарты недостаточно, необходима программная поддержка. Именно по этой причине с 2004 года изготовители видеокарт при написании драйверов следуют новым инструкциям от Microsoft.
Аппаратная поддержка предоставляется всем приложениям. В момент запуска анализируются возможности видеокарты и на основание полученных результатов присваивается уровень визуализации от 0 до 2.
Уровень 0 – отсутствие аппаратной поддержки.
Уровень 1 – частичная аппаратная поддержка.
Уровень 2 – полная аппаратная поддержка.
Декларированный пользовательский интерфейс. Еще одно нововведение в WPF это язык разметки XAML, являющийся подмножеством XML. Хотя весь пользовательский интерфейс можно описать на языке C# (или другом языке .Net), технология WPF использует другой подход, следуя которому интерфейс описывается на языке XAML, а поведение программы записывается в коде. Теперь дизайнер и разработчик могут работать параллельно и не вникать в работу друг друга.
Стили. В основу идеи отрисовки пользовательского интерфейса легла технология HTML. Переход к разработке на XAML дал возможность выводить свойства элементов окон в отдельные стили, по аналоги с CSS. И теперь изменить внешний вид окон стало ее проще, достаточно просто заменить файл со стилями.
Модель рисования. Если в WinForms рисовали пиксели, то в WPF работают с примитивами – это уже готовые базовые фигуры и прочие графические элементы. Кроме того, имеется встроенная поддержка трехмерно графики.
Анимация. В WinForm для того, чтобы форма отрисовала себя, необходимо использовать таймеры. При разработке технологии WPF в Microsoft пошли другим путем и дали ей поддержку анимации.
Видео и аудио. WPF работает с любым форматом видео и аудио, поддерживаемого проигрывателем Windows Media. Есть возможно интегрировать видеосодержимое в любые части пользовательского интерфейса. Впечатляюще выглядит совместное использование трехмерной графики и видео.
Команды. Также, как и в WinForms, в WPF присутствует событийная модель, базовые элементы были переписаны и наделены новыми возможностями, что также отразилось на событиях, и, тем не менее, принцип остался прежним. Иногда разные компоненты окна вызывают одно и тоже действие, но которое вызывается в разных обработчиках событий. В WPF появился способ вызвать реакцию элемента интерфейса через так называемые команды. Команды подчиняются определенным правилам, например, название метода оканчивается на Command, которое опускается при вызове метода.
Приложения на основе страниц. Можно строить веб-подобные приложения на основе страниц, что дает возможность пользоваться навигацией.
Безопасность. Ранее при разработке приложения, в него могли записать опасный код. Повышение уровня открытости и безопасности стали одними из причин появления языка XAML.
Независимость от разрешения. WPF берет на себя компоновку элементов интерфейса подстраивая его под разные разрешения.
Привязка данных. Привязать данные можно было и в WinForms, но в WPF этот механизм доведен до совершенства. Благодаря привязке существенно снижается количество строк кода и упрощает его анализ.
Заключение
Исходя из стратегии развития Microsoft, можно предположить, что технология WPF будет развиваться и дальше. Например, эта технология используется для написания приложений в стиле Metro.
Если сравнивать графические системы WinForms и WPF, то можно прийти к выводу, что вторая система имеет огромное превосходство. Единственным существенным достоинством WinForms можно назвать кроссплатформенность, такие приложения можно запустить на Mono. О планах по поддержке WPF в системах семейства Unix нет никаких сведений.
Но это не значит, что стоит забыть о технологии WinForms и все свои проекты переводить на WPF. Microsoft не сообщала о прекращение поддержки WinForms. Кроме того, у нее имеется большая история развития, а, следовательно, под неё написано множество готовых решений. Проекты, в которых пользовательский интерфейс стоит не на первом месте, могут быть написаны и на WinForms.
МакДональд, Мэтью. WPF 4: Windows Presentation Foundation в .Net 4.0 с примерами на C# 2010 для профессионалов. : Пер. с англ. – М. : ООО «И.Д. Вильямс», 2011. – 1024 с. : ил. – Парал. тит. англ.
В чем главное преимущество WPF над WinForms?
WPF программа медленее чем WinForms
Здравствуйте! Такая проблема написал приложение на winforms, которое анализирует точки в окне и.
В чем заключается преимущество языка C# в сравнении с языком C++?
Здравствуйте, уважаемые программисты. Подскажите — в чем заключается преимущество языка C# в.
WPF vs WinForms
Доброго времени суток! Дело обстоит так: Писал программу на WinForms, но из-за тормознуточти.
WinForms + WPF (MDI)
Можно ли в WinForms-окно поместить как MDI Child окно WPF? Можно ли в WPF-окно поместить WinForms.
Основное (от слова основа) преимущество WPF — в том, что для отрисовки графики используется не GDI/GDI+, а DirectX.
Который, во-первых, обеспечивает более высокую скорость отрисовки (во времена GDI сложную графику еще не изобрели), во-вторых, содержит больше штатных средств для реализации сложной графики, особенно трехмерной.
Поэтому в WPF и реализована более навороченная графика, чем в Winforms, это оказалось и разумнее, и проще.
И вам использовать WPF в случае со сложной графикой (трехмерная, с обилием анимаций, эффектов прозрачности) будет разумнее и проще.
Но в других случаях, проще взять Winforms, и ресурсы компа приложения будет кушать меньше, а не больше. И работать соответственно быстрее.
Если в одном приложении в разных местах используется и простая и крутая графика, то его рациональнее делать гибридным. Если простая преобладает, то приложение надо делать под Winforms, а в тех местах, где нужна крутая, через ElementHost подключать WPF.
Векторность — это просто когда есть координата нескольких вершин фигуры (или радиуса и центра, если это окружность, и т.д.) и она отрисовывается заново по этим координатам (а не растягивается по ним уже нарисованное изображение с ущербом для графики).
При этом координаты могут задаваться как относительно левого-верхнего угла контейнера (Winforms), так и, например, относительно центра или краев контейнера (WPF).
Margin при привязке к левому-верхнему углу — это и есть Left-Top-Right-Bottom (отступы от левого-верхнего и правого-нижнего углов) как в Winforms. Только в Winforms, Right и Bottom не настраиваются, а только Width и Height, в WPF же и то и другое для разных видов привязки.
Добавлено через 5 минут
Еще одно преимущество WPF: при каких-то ошибках в коде, генерируемом конструктором GUI (форм/окон), и которые конструктор не может исправить сам, можно исправить вручную в XAMLе, который всегда на виду.
В Winforms такой код все равно есть и ошибки в нем порой бывают, но он спрятан в ***.Designer.cs, что неудобно.
Это только если приложение будет состоять исключительно из UI. Причем WPF использует DirectX, который в свою очередь юзает аппаратное ускорение, а значит в WPF графика будет в разы лучше (без дерганий) и менее натуплять процессор, а задействовать видеоадаптер. Расчет какой-нибудь сложной матрицы или графов будет одинаково не быстро что на WPF, что на Forms.
Что все так зациклились на графике?! Привязка данных: в формах это можно выполнить только на уровне кода, в WPF — на уровне разметки. То есть мы можем использовать патерн MVC.
Само формирование разметки в WPF в разы легче: в тот же ListBox можно засунуть любой другой элемент (по сути перед нами тот же html), на формах с этим вечные пляски.
Ресурсы, стили, шаблоны данных.
P.S. Делать гибриды в приложении вообще не советую. Формы есть смысл использовать только если пишеш на «.NET 2.0», ну или если проект был написан на них рание (не переписывать же рабочее).
Wolfdp, > а значит в WPF графика будет в разы лучше (без дерганий)
Что все так зациклились на графике. )))))
Или свистоперделки — нынче единственный способ выделиться среди конкурентов, а ля макияж у девушки легкого поведения?
> а задействовать видеоадаптер
А если он слабый?
Покупая комп для работы с БД (не фотошопом) в мелкой конторе какой-нить, думают о ЦП и ОЗУ, а не видеоадаптере. Ибо видеоадаптер для работы с БД не нужен. А одного неадекватного товарища, зацикленного на WPF, чьи свистоперделки для работы нафиг не нужны, можно просто послать куда подальше и найти нормального программиста, вместо того чтоб на хороший видеоадаптер тратиться.
> То есть мы можем использовать патерн MVC.
Что такое MVC? Что такое паттерн? Сколько разных программ писал, на скольких ЯП, под сколько платформ — и хоть раз пригодилось хотя бы погуглить что это такое.
> Формы есть смысл использовать только если пишеш на «.NET 2.0»
Ну так-то господин «Оппа Казахстан» написал, что WPF далеко не всегда лучше Winforms.
Создайте проект с 1 пустой формой без рамки в виде ромба на Winforms и такой же проект на WPF. Реализуйте растягивание окна в обоих случаях. И тексбокс на каждом окне разместите, чтобы вместе с окном растягивался. И сравните, что растягиваться быстрее будет и что ОЗУ меньше кушать будет. Сами убедитесь, что простая графика быстрее рисуется GDI, чем GDI+ и DirectX.
Но каждый кулик свое болото хвалит. Ежели бывать на нескольких болотах сразу для него непосильный труд )))
Что изучать: WinForms или WPF?
Вот скажите, как это понимать, когда я только начал читать книги, мне писали «Начинайте с консольных приложений». Потом когда я прошёл этот курс, в другой книге уже начали говорить о WinForms, и сейчас я начал читать другую книгу, там автор вообще пишет:
Зачем писать под WinForms, ведь её элементы почти не менялись за последние 10 лет, учите лучше WPF
Я сейчас вообще как ёжик в тумане. Что учить? На чём остановиться? Что ждёт дальше? Может быть, я поучу WPF, а в другой книге уже будут говорить о новом более красочном написании приложений? Можете помочь распутаться и всё расставить по полочкам. пожалуйста.
4 ответа 4
Если Вас интересует программирование desktop-приложений под Windows, то лучше остановиться на WPF, так как:
- это просто самая новая технология на данный момент
- использует 3D-ускоритель для отрисовки интерфейса
- ну и готовых возможностей по «украшению» интерфейса здесь гораздо больше
Хотя, если Вы будете использовать WinForms, приложения будут также отлично работать, так что выбор за Вами.
Насчёт того что ждёт дальше, то до выхода Windows 8 нкаких изменений не планируется. Но как обещают в Microsoft, после её выхода появится возможность разрабатывать интерфейс desktop-приложений используя HTML+CSS+JS.
Да, смотря что ты хочешь создавать. WPF больше подходит для крутых компов, где стоит минимум XP, с .NET 3.0. Библиотека тяжелая, но в Windows Vista уже стоит по умолчанию. Но за эти неудобства WPF дает хорошие преимущества почти во всем, но только на Windows. WindowsForms проектировать можно и даже предпочтительнее, у него есть следующие преимущества над WPF (сколько помню, столько и напишу)
- SDI и MDI приложения (хотя есть библиотеки для эмуляции)
- легче организовывать интерфейс OpenGL, DirectX
- Теоретически кроссплатформенно за счет наличия MONO Framework
- GDI+ легче в обращении (но медленнее), чем накрученная render-система в WPF
- Вопреки распространённому заблуждению, поддерживают и полупрозрачные окна
Если нужны более глобальные сведения по выводу любых изображений, мне кажется, надо изучать DirectX и OpenGL. Если же надо попроще, то тогда WPF. Рад, если помогу определиться.
Лично я (правда, вместе с Microsoft) порекомендую приступать к изучению UWP, Universal Windows Platform. Microsoft усиленно (но, к сожалению, не слишком то эффективно) проталкивает эту технологию, и, судя по всему, будет проталкивать ее еще определенное время, пока в очередной раз не сменится top management.
Опять-таки, программирование для WPF и UWP имеет много общего, так, что освоив UWP, вы без особого труда сможете писать и стандартные Windows приложения, а не только совместимые с Microsoft Store.
Кроме того, умение программировать UWP приложения привлекательно еще в чисто практическом смысле: освоив это, вы сможете опубликовать свое приложение в магазине, и сделать его доступным (потенциально) сотням миллионов пользователей. Не факт, конечно, что ваше приложение будет пользоваться хоть каким-то успехом, но уж несколько сотен закачек получите по любому. А работа с реальным проектом, и реальной отдачей — это лучшая практика для начинающего программиста, на порядки полезнее выполнения «стандартных» упражнений из учебника, уж поверьте мне на слово!