Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки

HotLog


 

Создание проекта

  1. В Code::Blocks 20.03 создаем обычное консольное приложение C++.

  2. Для подключения функций графической библиотеки заходим в меню

    Project \ Build options \ Linker Settings \ Add

    и выбираем файл:

    C: \ Program Files \ CodeBlocks \ MinGW \ x86_64-w64-mingw32 \ lib \ libgdi32.a

    и жмем все кнопки Ок.

  3. Вставляем следующий код:
  4. Консольное окно можно убрать, изменив тип приложения с «Console application» на «GUI application» в «Project \ Properties \ Build targets \ Type».

  5. Нажимаем Ctrl+F11 (Rebuild) и жмём F9 (Build & Run).

Графические функции

Выбор пера с выбором стиля, толщины и цвета в формате RGB (0x00bbggrr):

Выбор кисти с установленным стилем заливки и цветом в формате RGB:

Отображение прямоугольника по противоположным углам (x1,y1) и (x2,y2):

Отображение эллипса вписанного в прямоугольник:

Отображение точки в координатах (x,y) цветом clr в формате RGB:

Перемещение невидимого графического курсора в точку (x,y):

Перемещение невидимого графического курсора в точку (x,y) и рисование отрезка от прошлой позиции курсора:

Закрашенный многоугольник по массиву из n точек (в примере n=3):

Вывод текста:

Работа с окнами

Работа с существующими окнами:

Получение размеров клиентского окна:

Обработка нажатий клавиш клавиатуры и мыши

Для обработки клавиш необходимо заменить стандартный обработчик событий окна DefWindowProcA на свой (в примере это MyWndProc), указав его в поле lpfnWndProc класса окна:

Быстрая прорисовка с использованием кадрового буфера

Для избегания мерцания изображения при интенсивной прорисовке элементов можно саму прорисовку осуществлять в виртуальной памяти, а после результат копировать в окно. Пример реализации использования кадрового буфера (здесь width и height – глобальные переменные: размеры клиентского окна):

Непрерывная анимация

При использовании функции GetMessage происходит остановка программы до момента наступления какого-либо события. Иногда это нежелательно, так как во многих случаях требуется непрерывность выполнения программы независимо от событий. Для этого можно использовать функцию PeekMessageA. Например, цикл в функции main может выглядеть следующим образом:



Красноярский краевой Дворец пионеров, (c)2006 - 2021, E-mail: admin@acmp.ru