18105

Графические примитивы API Windows

Лекция

Информатика, кибернетика и программирование

Лабораторная работа №2 Графические примитивы API Windows 1. Отдельные пикселы Функция SetPixel рисует один пиксел растра. Она имеет такие аргументы: SetPixelhdc x y clr где hdc контекст xy координаты clr цвет пиксела. Аргумент clr имеет тип 4байтного COLORREF причем тр...

Русский

2013-07-06

77.01 KB

9 чел.

Лабораторная работа2

Графические примитивы API Windows

1. Отдельные пикселы

Функция SetPixel рисует один пиксел растра. Она имеет такие аргументы:

SetPixel(hdc, x, y, clr),

где hdc – контекст, x,y – координаты, clr – цвет пиксела. Аргумент clr – имеет тип 4-байтного COLORREF, причем три младших байта соответствуют компонентам Blue, Green, Red (в диапазоне от 0 до 255 каждая), а старший байт не используется. Цвет, кодируемый типом COLORREF, удобно задавать макросом Red(r,g,b). Функция SetPixel сама имеет тип COLORREF – она возвращает значение цвета пиксела. 

2. Линии

В состав API Windows входит несколько функций, которые рисуют прямые и кривые линии:

AngleArc 

дуга окружности с заданием углов

BOOL AngleArc(

 HDC hdc, // контекст устройства 

 int X, // x-координата центра окружности

 int Y, // y-координата центра окружности

 DWORD dwRadius, // радиус окружности 

 FLOAT eStartAngle, // начальный угол дуги

 FLOAT eSweepAngle  // конечный угол дуги

  );

Arc 

дуга эллипса

BOOL Arc(

 HDC hdc, // контекст устройства

 int nLeftRect, // x-координата левого верхнего угла

 int nTopRect, // y-координата левого верхнего угла

 int nRightRect, // x-координата правого нижнего угла

 int nBottomRect, // y-координата правого нижнего угла

 int nXStartArc, // x-координата начальной точки

 int nYStartArc, // y -координата начальной точки

 int nXEndArc, // x-координата конечной точки

 int nYEndArc  // y -координата конечной точки

  );

LineTo

рисование отрезка прямой линии от текущей позиции к заданной точке

BOOL LineTo(

   HDC hdc,      // контекст устройства

   int nXEnd,  // x-координата последней точки линии

   int nYEnd   // y-координата последней точки линии

  );

MoveToEx

задание текущей позиции графического вывода

BOOL MoveToEx(

   HDC hdc, // контекст устройства

   int X, // x- координата

   int Y, // y- координата 

   LPPOINT lpPoint  // адрес старой позиции

  );

Polyline 

ломаная линия из многих связанных между собой отрезков прямых (полилиния)

BOOL Polyline(

   HDC hdc, // контекст устройства

   CONST POINT *lppt, // адрес массива, содержащего конечную точку

   int cPoints  // количество точек в массиве

  );

PolylineTo

ломаная линия из многих связанных между собой отрезков прямых (полилиния)

BOOL PolylineTo(

   HDC hdc, // контекст устройства

   CONST POINT *lppt, // адрес массива точек 

   DWORD cCount  // количество точек в массиве

  );

3. Стиль линии. Перо.

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

Создавая новое перо, нужно обязательно позаботиться об уничтожении предыдущего пера. Не следует пытаться уничтожить стандартные перья.

Типичная последовательность для вывода линии с заданным стилем может быть такой:

HPEN hPen, hPenOld;

hPen = CreatePen(PS_SOLID,1,RGB(255,0,0);

//формат CreatePen(стиль, толщина, цвет)

hPenOld = (HPEN)SelectObject(hdc,hPen);

. . . //здесь рисуем линии

SelectObject(hdc,hPenOld);   //выбираем предыдущее перо

DeleteObject(hPen);          //уничтожаем наше перо

Здесь создается перо, которое соответствует тонкой красной сплошной линии. После использования перо уничтожается.

Задание

Изобразить в центре экрана квадрат, движущийся по окружности и вращающийся вокруг своего центра.

Изменение координат центра квадрата и концов отрезков (сторон квадрата) можно задать через параметрическое уравнение окружности x=r cos t, y=r sint, t[0,2), r-радиус окружности.

Для создания вращения используем цикл, например, while 

t=0;

while(t<12.55){ // два оборота 

 x1=200+r*cos(t); //если окно 400х300

 y1=150+r*sin(t);  

 x2=200+r*cos(t+3.14/2);

 y2=150+r*sin(t+3.14/2);

 // (x1,y1)-координаты первой вершины квадрата

 // (x2,y2)-координаты второй вершины квадрата

 // для каждой следующей добавляем еще 3.14/2

 //находим x3 y3 x4 y4

 MoveToEx(hdc,x1,y1,NULL);

 LineTo(hdc,x2,y2);

 LineTo(hdc,x3,y3);

// аналогичные линии для 3-х других сторон

 t+=0.001;

}

Перед тем как рисовать новую позицию квадрата нужно подождать sleep(int ms) и, взяв белое перо, удалить старую позицию.

Для того, чтобы квадрат двигался по окружности, нужно создать подобный цикл для перемещения центра (вместо фиксированного 200,150).


 

А также другие работы, которые могут Вас заинтересовать

48073. Матеріалознавство та технологія матеріалів 1.4 MB
  Кристалізація металів. Механічні властивості металів та методи їх визначення Мета: Ознайомити студентів з основними поняттями конструкційних матеріалів: будовою та властивостями металів роллю вітчизняних та зарубіжних вчених у розвитку матеріалознавства з основними механічними властивостями металів і сплавів та методами їх випробування. Кристалічна будова металів будова і властивості реальних кристалів. Плавлення металів.
48074. Народознавство 1.1 MB
  Релігія в житті українського народу. Звичаї та обряди українського народу. Ретромандрівка в глибину століть допоможе зрозуміти духовність і менталітет нашого народу віковічно творений як образне бачення українською людиною світу землі та життя на ній. Українське народознавство як навчальний предмет Відродження України неможливе без пробудження національної свідомості українського народу насамперед молоді.
48075. Электротехника 5.26 MB
  Определение связи между токами напряжениями параметрами заданной цепи и теми величинами которые определяют работу рассматриваемой установки например: к. Принцип работы и общие свойства важнейших электротехнических устройств и элементов электрической цепи. Задачи синтеза заключаются в разработке методов такого выбора схемы соединения элементов цепи и такого подбора параметров этих элементов чтобы полученная цепь обладала заданными характеристиками. По наличию данных элементов различают соответственно активные и пассивные цепи.
48076. НЕГЛАСНІ СЛІДЧІ (РОЗШУКОВІ) ДІЇ. КУРС ЛЕКЦІЙ 722 KB
  Підстави проведення негласних слідчих розшукових дій. Засоби що використовуються під час проведення негласних розшукових дій Лекція 3. Негласні слідчі розшукові дії законодавець визначив як різновид слідчих розшукових дій відомості про факт та методи проведення яких не підлягають розголошенню за винятком випадків передбачених Кримінальним процесуальним кодексом України ч. Подано базові нетаємні положення що стосуються організації та тактики проведення негласних слідчих розшукових дій вивчення яких відповідає вимогам підготовки...
48077. ГРОШІ ТА КРЕДИТ. КОНСПЕКТ ЛЕКЦІЙ 971 KB
  Сутність і функції грошей. Походження грошей. Види грошей. Функції грошей. Характеристика і структура грошового обороту
48078. Культура наукової мови 542 KB
  Наукова мовна культура основа професійної діяльності дослідника Наукова мова як комунікативний феномен Поняття культура наукової мови.Етапи становлення й дослідження наукової мови Роль науки в житті суспільства за останні десятиліття надзвичайно зросла. Дається взнаки і домінування в міжнародному науковому просторі англійської мови як глобальної мови науки.
48079. Облікова політика підприємства 2.96 MB
  Якщо такі умови визначити неможливо амортизація нараховується за прямолінійним методом ПсБО 9 Запаси Одиниця обліку запасів найменування; однорідна група вид Методи оцінки вибуття запасів ідентифікованої собівартості відповідної одиниці запасів; середньозваженої собівартості; собівартості перших за часом надходження запасів ФІФО; нормативних витрат; ціни продажу Застосовується підприємствами роздрібної торгівлі та громадського харчування Метод обліку транспортнозаготівельних витрат шляхом прямого...
48080. Общая биология. Конспект лекций 728.5 KB
  Методы изучения наследственности человека Генеалогический метод ЛЕКЦИЯ Воздействие человека на биосферу Круглые черви паразиты человека Аскарида ЛЕКЦИЯ Клещи обитатели жилища человека
48081. ОБЩИЙ КУРС ЭЛЕКТРИЧЕСКИХ СЕТЕЙ 1.54 MB
  Определить годовые потери электроэнергии в двухцепной линии 220В, длиной 200км с проводами марки АСО-300. Потери мощности при наибольшей нагрузке линии 5 МВт, активное сопротивление линии равно 10,8 Ом. Наибольшая нагрузка линии Рм=110 МВт. Продолжительность наибольшей нагрузки Тм=5500ч