18105

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

Лекция

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

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

Русский

2013-07-06

77.01 KB

8 чел.

Лабораторная работа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).


 

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

43410. Разработка и исследование математическую модель функционирования бытового электрического водонагревателя 621.5 KB
  Интегрированная среда разработки Trce ModeОбщие сведения TRCE MODE состоит из инструментальной системы интегрированной среды разработки и из набора исполнительных модулей. С помощью исполнительных модулей TRCE MODE проект АСУ запускается на исполнение в реальном времени. TRCE MODE позволяет создавать проект сразу для нескольких исполнительных модулей узлов проекта.
43411. Усилитель мощности звуковой частоты 296.5 KB
  Очень широкое применение в современной технике имеют усилители у которых как управляющая так и управляемая энергия представляет собой электрическую энергию. Такие усилители называют усилителями электрических сигналов. Усилители электрических сигналов далее просто усилители применяются во многих областях современной науки и техники. Особенно широкое применение усилители имеют в радиосвязи и радиовещании радиолокации радионавигации радиопеленгации телевидении звуковом кино дальней проводной связи технике радиоизмерений где они...
43412. УСИЛИТЕЛЬ МОЩНОСТИ СИГНАЛОВ ЗВУКОВОЙ ЧАСТОТЫ 551 KB
  Выходная группа каскадов –двухтактный эмиттерный повторитель на составных квазикомплементарных транзисторах работающих в режиме АВ. наметились два направления в конструировании любительских УМСЗЧ – проектирование ультролинейных усилителей имеющих коэффициент гармоник порядка тысячных долей процента но весьма сложных в регулировке и налаживании и создание сравнительно простых усилительных устройств обычно на одном – двух операционных усилителях и двух – четырёх транзисторах легко повторяемых но не позволяющих получить требуемое для...
43413. Расчет и конструирование плиты и главной балки монолитного ребристого перекрытия 923.5 KB
  Здания по крайним осям 253x23 м причем расстояние между продольными осями здания l1=84м – что является пролетом главной балки lГБ=84м а между поперечными l2=46м – что является пролетом второстепенной балки lВБ=46м. Арматура рабочая продольная: для плиты класса ВрI арматурная проволока 35 мм и АIII для главной балки класса АIII в Арматура рабочая поперечная для главной балки класса АIII г Арматура монтажная: для плиты класса ВрI; для главной балки АIII. Компоновка перекрытия Вдоль поперечных осей здания...
43414. Расчет несущих свойств самолёта 659 KB
  Расчет несущих свойств самолёта Cyα= α для малых чисел М полёта с убранными средствами механизации и шасси на высоте полёта Н=0; 2. Расчет поляры самолёта Cyα=Cxα для малых чисел М полёта с убранными средствами механизации и шасси на высоте полёта Н=0; 3. Определение коэффициента лобового сопротивления самолёта Схα0 при Cyα=0 для малых чисел М полёта на высоте Н=0; 4. Оценка режимов полета самолёта на расчетной скорости и высоте полёта крейсерский режим полёта; 5.
43415. Гигиена (hygieinos) – область медицинской науки 272.37 KB
  Гигиена (hygieinos) – область медицинской науки о сохранении и улучшении здоровья путём проведения предупредительных мероприятий. Она изучает влияние условий жизни и труда на здоровье человека и разрабатывает мероприятия по профилактике заболеваний. На организм человека могут воздействовать различные факторы внешней среды
43416. Системи криптографічного захисту інформації 430 KB
  К алгоритмам шифрования предъявляются определенные требования: высокий уровень защиты данных против дешифрования и возможной модификации; защищенность информации основанная только на знании ключа и не зависящая от того известен алгоритм или нет правило Кирхгофа; малое изменение исходного текста или ключа приводящее к значительному изменению шифрованного текста эффект обвала; область значений ключа исключающая возможность дешифрования данных путем перебора значений ключа; экономичность реализации алгоритма при достаточном...
43417. Безопасность жизнедеятельности. Методические указания 73 KB
  Первый слайд должен отражать содержание титульного листа (кроме отметки о допуске к защите). На остальных слайдах, в зависимости от выбранной темы, рекомендуется отразить результаты анализа причин рассматриваемых ЧС, этапы их развития, статистические данные или место рассматриваемой ЧС в общей классификации, либо этапы анализа особенностей рассматриваемого объекта экономики с точки зрения его устойчивости к ЧС и его результаты.
43418. Бухгалтерский учет налога на добавленную стоимость 143.5 KB
  Общий порядок уплаты налога на добавленную стоимость Учет налога на добавленную стоимость Список использованной литературы Введение Налог на добавленную стоимость НДС занимает важное место в системе налогов России. Расчеты организации с бюджетом по налогу на добавленную стоимость осуществляются в соответствии с главой 21 части второй Налогового кодекса РФ. Налог на добавленную стоимость – косвенный налог плательщиками которого являются организации и индивидуальные предприниматели.