Как подключить графическую библиотеку

C++ — один из самых мощных и востребованных языков программирования. Ежедневно на нём пишут сотни приложений, зачастую использующих GUI. Однако работа с графикой не всегда удобна программисту — в таком случае применяют готовые графические библиотеки. Они позволят сделать разработку графической части приложений максимально быстрой и удобной.

SFML (Simple and Fast Multimedia Library) — одна из самых удобных и быстрых графических библиотек для 2D-графики. Её неоспоримое преимущество — минимальные требования к уровню знаний языка и лёгкость освоения: всего за несколько дней можно написать вполне себе полноценную программу. К примеру, первое графическое приложение «SFML works!» можно написать всего за минуту. Ещё одно неоспоримое преимущество — кроссплатформенность: SFML работает под Windows, Linux (только X11, но не Wayland) и Mac, планируется выход под Android.

Кое-что ещё

SFML библиотека используется по большей части небольшими стартапами и программистами, для которых создание игр — хобби. SFML популярен среди небольших команд благодаря тому, что не требует написания больших объёмов кода.

Qt представляет собой целый набор инструментов для быстрого и удобного проектирования GUI. Конечно же, здесь можно писать и игры — почему бы и нет? — но Qt привлекает программистов в основном тем, что она является быстрой, удобной, гибкой и кроссплатформенной. Во многом Qt обогнала даже SFML: библиотека доступна как на Windows, Linux и Mac, так и на мобильных платформах — Windows Mobile, Android и iOS.

Кое-что ещё

Qt расширяет C++ с помощью МОК (Мета-объектного компилятора) и предоставляет дополнительные функции (например, сигналы и слоты). Также имеет платную службу поддержки (как и платную лицензию). Для Qt есть большой выбор IDE: QtDesigner, QtCreator, QDevelop, Edyuk, а также доступна интеграция с Visual Studio, Eclipse и XCode.

Также можно пройти готовый курс по данной библиотеке.

Cairo

Cairo — библиотека для отрисовки векторных изображений под Linux, Windows и Mac OS. К примеру, такой крупный проект, как Mozilla, использует Cairo в браузерном движке Gecko. Также Cairo лежит в основе некоторых операционных систем (MorphOS, AmigaOS) и приложений (InkScape, Synfig, Graphite). При использовании библиотеки будьте готовы к отсутствию русскоязычных ресурсов.

Кое-что ещё

Cairo может взаимодействовать с OpenGL бэкендом с поддержкой GPU, что, конечно, открывает целый список полезных функций.

Cocos2D-X

Кроссплатформенная библиотека Cocos2D-X призванна упростить разработку мобильных игр. Поддерживает все те же платформы, что и Qt. Из плюсов стоит отметить доступность, удобство эксплуатации и создание отдельного конструктора игр, основанного на библиотеке Cocos Creator. В списке игр, основанных на движке, есть всемирно известная BADLAND, работающая на всех доступных платформах.

Кое-что ещё

Если при создании игры вам нужно работать с графикой и анимацией в больших объёмах, то лучше использовать Unity вместо Cocos2D-X. В Unity имеется возможность плавной интеграции с такими инструментами, как Photoshop, Maya или Blender. В Cocos2D-X вся графика добавляется извне и на неё ссылаются из кода.

В Рунете нет уроков по этой библиотеке, но на английском языке есть отличный курс от разработчиков.

Juce — кроссплатформенный фреймворк, предназначенный для создания приложений и плагинов на языке C++.

Документации по Juce много, но не на русском языке. Поэтому можно скачать книгу «Программирование на C++ с JUCE 4.2.x: Создание кроссплатформенных мультимедийных приложений с использованием библиотеки JUCE на простых примерах».

Кое-что ещё

Juce больше популярен среди разработчиков аудио-ПО благодаря набору интерфейсов-оболочек для построения аудио-плагинов.

wxWidgets

wxWidgets — одна из старейших, но в то же время наиболее известных графических библиотек для отрисовки GUI. Её основной плюс — производительность. Если QT использует низкоуровневый код лишь для таких элементов, как кнопки и полосы прокрутки, то wxWidgets для каждой системы свой, и благодаря этому все элементы отображаются максимально похожими на системный стиль.

Читайте также:  Как открыть порты видео

Кое-что ещё

Важная особенность wxWidgets заключается в использовании «родных» графических элементов интерфейса операционной системы везде, где это возможно. Это существенное преимущество для многих пользователей, поскольку они привыкают работать в конкретной среде, а изменения интерфейса программ часто вызывают затруднения в их работе.

В Сети есть урок по работе с библиотекой от её разработчиков.

SDL 2.0

SDL — кроссплатформенная 2D-библиотека, предназначенная для написания приложений (в основном игр). Поддерживаются Windows, Linux, Mac OS, а также Android, Windows Mobile и iOS. Преимущества библиотеки — быстрота, надёжность и лёгкость в эксплуатации. Также в библиотеке реализованы профессиональные инструменты для работы со звуком — это большой плюс при разработке крупных проектов.

Кое-что ещё

Комбинируется с wxWidgets и хорошо интегрируется с OpenGL.

Существует целый цикл уроков, размещённый на Habr.

Пожалуй, одна из самых известных графических библиотек. GTK+ — графический фреймворк, широко применямый во многих системах. Изначально он задумывался как компонент GIMP, но за 20 лет после выпуска первой стабильной версии он нашёл применение в сотнях других приложений.

Сейчас GTK+ — полноценный графический фреймворк, не уступающий тому же QT. Он поддерживает разные языки программирования и продолжает развиваться.

Кое-что ещё

В своё время библиотека создавалась в качестве альтернативы Qt, которая была платной. GTK+ — один из немногих фреймворков, которые поддерживают язык C. Библиотека кроссплатформенная, но есть мнение, что программы на Linux выглядят более нативно, чем на Windows или Mac (GTK+ хорошо поддерживается даже на KDE). Интересно, что из-за некоторых проблем с кроссплатформенностью Wireshark перешла на Qt.

Пример первой программы можно посмотреть на Википедии.

Другие интересные статьи по C++ можно посмотреть у нас на сайте.

Заключение

Выше представлены наиболее популярные технологии для работы с GUI не только на C++, но иногда и на других языках (например, Qt и GTK+). Однако всегда следует учитывать особенности той или иной технологии. Выпишите список функций своего приложения, ещё раз прочитайте описания всех библиотек и фреймворков, и только после этого выбирайте то, что действительно подходит больше всего для проекта.

Обновл. 8 Сен 2019 |

Пссс, парень! Не хочешь попробовать немного SFML? Убойная штука. Достаточно самой малости и с её помощью ты сможешь воплотить в жизнь то, о чём раньше мог только мечтать. Тебе понравится, гарантирую. Тем более тебе, как новичку, первая порция бесплатно, я угощаю. Ну что, договорились? Тогда по рукам.

Вступление

«Что же из себя представляет SFML?» — спросишь ты.

SFML (с англ. «Simple and Fast Multimedia Library» = «Простая и быстрая мультимедийная библиотека») — это свободная кроссплатформенная мультимедийная библиотека, написанная на C++, но также доступна и для C, C#, .Net, D, Java, Python, Ruby, OCaml, Go и Rust. Представляет собой объектно-ориентированный аналог SDL.

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

Исходный код библиотеки предоставляется под лицензией zlib/png, а скачать SFML можно с оф. сайта разработчика www.sfml-dev.org.

Что нужно для начала?

Все примеры в этом уроке были сделаны мной в MS Windows 7 с использованием IDE MS Visual Studio 2017 Community Edition и библиотеки SFML 2.5.1.

Ну что, парень, ты готов? Да вижу, что готов. Погнали!

Установка библиотеки SFML

Я не буду рассказывать, как установить Visual Studio, а перейду сразу к SFML. Для того чтобы установить библиотеку, нужно зайти на сайт www.sfml-dev.org и перейти в пункт меню «Download» и скачать «SFML 2.5.1»:

Читайте также:  Как восстановить телефон сони иксперия

Как уже писалось выше, в качестве >эстетов Code Blocks. Помимо этого, в глаза бросаются варианты библиотеки для других версий Visual Studio. Сразу дам совет — не пытайся лепить Франкештейна, используя неподходящий билд SFML, иначе ты рискуешь получить вагон и маленькую тележку всякого рода проблем на свою голову:

Теперь скачанный архив нам нужно распаковать. У себя я выбрал следующий путь C:SoftSFML-2.5.1-windows-vc15-32-bit .

Далее создадим пустой проект и подключим к нему библиотеку SFML. Для этого запусти Visual Studio и выбери Файл > Создать > Проект… или можно воспользоваться сочетанием горячих клавиш Ctrl+Shift+N . Задай имя и расположение проекта так, как показано на скриншоте ниже:

Теперь, когда у нас есть проект, нужно добавить в него файл, который будет содержать исходный код нашей программы. Для этого в окне «Обозреватель решений» щёлкни ПКМ по строчке Исходные файлы > Добавить > Создать элемент… :

В поле «Имя» укажи main.cpp :

Отлично! Следующим шагом будет подключение библиотеки SFML к нашему проекту. Для этого нужно:

подключить каталог заголовочных и исходных файлов SFML ( /include );

подключить каталог библиотечных файлов SFML ( /lib );

подключить библиотечные файлы SFML в качестве дополнительных зависимостей.

Переходим в Проект > Свойства: SFML_Tutorial… :

В верхнем левом углу «Страницы свойств SFML Tutorial» есть выпадающий список «Конфигурация», установи его значение как Все конфигурации . Также проверь, что в параметре «Платформа» установлено значение Win32 . Затем в левой части окна найди и выбери раздел Свойства конфигурации > С++ > Общие . Обрати внимание на правую часть. Тебя будет интересовать параметр «Дополнительные каталоги включаемых файлов». Выбери его и нажми . Перед тобой появится новое окно, в котором нужно указать путь к заголовочным файлам библиотеки SFML. Обычно они располагаются в папке include . У меня этот путь выглядит как C:SoftSFML-2.5.1-windows-vc15-32-bitSFML-2.5.1include .

Похожим образом подключаются и файлы библиотек. Всё, что нужно сделать — это выбрать в левой части Свойства конфигурации > Компоновщик > Общие . Затем «Дополнительные файлы библиотек» и . В открывшемся окне нужно будет указать путь к библиотечным файлам SFML, у меня это C:SoftSFML-2.5.1-windows-vc15-32-bitSFML-2.5.1lib .

Осталось подключить несколько файлов в виде дополнительных зависимостей для «Компоновщика». Для этого нужно переключить тип конфигурации на Debug , а затем в левой части окна выбрать Свойства конфигурации > Компоновщик > Ввод . Переведи взгляд на правую часть, где нужно найти строчку «Дополнительные зависимости» и нажми . В появившемся окне впиши имена следующих 4-ёх файлов:

sfml-graphics-d.lib
sfml-window-d.lib
sfml-audio-d.lib
sfml-system-d.lib

Должно получиться следующее:

Первые шаги и первые…

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

Я вижу, как твоя рука уже потянулась к кнопке «Скомпилировать и запустить проект», но не торопись, давай сначала разберём данный код:

Строка №1: Директива препроцессора #include… , которая подключает исходный файл SFML/Graphics.hpp в наш проект. Как раз этот файл и предоставляет нам возможность работать с 2D-графикой: спрайтами, текстом, геометрическими фигурами и прочими объектами.

Строка №3: Подключаем пространство имён sf .

Строка №8: Создаём объект window класса RenderWindow . Данный объект — это наше окно, в котором будет отображаться 2D-графика. Первый параметр VideoMode(200, 200) задаёт видеоразрешение окна (ширину и высоту). Второй параметр "SFML Works!" — это заголовок окна.

Читайте также:  Как показать все скрытые листы в excel

Далее идут 2 цикла while: внешний (строка №11) и внутренний (строка №15). Сложного тут ничего нет. SFML предлагает удобные средства для работы с событиями. Именно их мы и будем использовать для создания цикла работы приложения и обработки событий окна. Во внешнем цикле while при помощи метода isOpen() мы проверяем, открыто ли наше окно в данный момент. Во внутреннем цикле while метод pollEvent(event) перебирает очередь событий (сообщений), которые возникают в нашем окне.

Очередь может содержать любое количество сообщений, именно по этой причине мы и используем цикл, чтобы перебрать их все. Предположим, например, что пользователь перемещает курсор во время выполнения нашей программы или нажимает на какие-то объекты. SFML обнаружит это и поместит два события в очередь: одно на перемещение курсора и одно на нажатие на объект. Выбрать определённое сообщение из очереди можно с помощью метода pollEvent() класса RenderWindow. Так вот, если какое-то событие из этой очереди совпадает с Event::Closed (т.е. пользователь нажал на крестик, тем самым послав сигнал «Закрыть окно»), то при помощи windows.close() мы закрываем окно. По сути, этот цикл бесконечен и выход из него только один — закрыть окно программы.

В строке №23 мы вызываем метод display(), который отвечает за отрисовку нашего окна.

Вот теперь можно перейти к компиляции и первому запуску программы. Для этого нужно нажать в MS Visual Studio Отладка > Запуск без отладки (или Ctrl+F5 ). Ииии, вот и она! Твоя первая… ЧТО…. ОШИБКА…. WTF….

«Что за хрень. » — спросишь ты. Столько времени потрачено на ковыряние, настройку и прочее ради вот этого вот?! Долбанного окна с ошибкой?! Нафиг всё, дизлайк/отписка, го даст2 я создал.

А проблема в том, что исполняемый файл нашей программы не может найти *.dll-файлы, в которых хранятся используемые нашим приложением функции. Решение очень простое — нужно скопировать все файлы (11 штук) из папки C:SoftSFML-2.5.1-windows-vc15-32-bitSFML-2.5.1in в папку C:devSFML_TutorialDebug , в которой хранится наш исполняемый файл SFML_Tutorial.exe:

Теперь снова попробуй скомпилировать и запустить проект. В результате должно получиться следующее:

Б иблиотека (модуль) CRT в Turbo Pascal.

Библиотека CRT позволяет менять цвета и яркость экрана, производить

его очистку, управлять звуковым генератором компьютера.

Подключение модуля CRT производится директивой USES CRT, которая

указывается в разделе описаний. CRT — аббревиатура, означающая

Таблица настройки цветов в модуле CRT Turbo Pascal

Число Процедуры
    0
    TextColor, TextBackGround
    1
    TextColor, TextBackGround
    2
    TextColor, TextBackGround
    3
    TextColor, TextBackGround
    4
    TextColor, TextBackGround
    5
    TextColor, TextBackGround
    6
    TextColor, TextBackGround
    7
    TextColor, TextBackGround
    8
    TextColor
    9
    TextColor
    10
    TextColor
    11
    TextColor
    12
    TextColor
    13
    TextColor
    14
    TextColor
    15
    TextColor
    128
    TextColor (как слогаемое)
Adblock
detector