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).


 

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

33887. Общественная жизнь страны во второй половине 40-х – начале 50-х годов 26 KB
  Победа воспринималась как общая раскол народа и власти начался позднее. Но лояльное отношение к власти не означало что никто не был против режима. Почему фронтовики не могли выступить против власти единство народа и власти во время войны психологическая усталость после войны период залечивания ран.
33888. Развитие социальной сферы городов. Проблемы жилья. Денежная реформа. Быт. Внешний вид. Спорт 28.5 KB
  Жилье. В годы войны крова лишились более 25 млн. человек. В деревнях жили в землянках, государство восстанавливало только города -14% бюджета. В 1945 СНК принял решение о восстановлении 15 городов. Восстановление было всенародным делом (комсомольско-молодежные бригады).
33889. Культурно-просветительная работа, общее и специальное образование. Во второй половине 40-х – начале 50-х гг 38 KB
  Задачи образования восстановить всеобщее 7летнее образование с 1949 обучить тех кто не обучился в войну школы рабочей молодежи школы комсомольской молодежи. Проблема уровня образования. Пример Красноярского края в восстановлении образования. Чрезмерная идеологизация образования.
33890. Наука в послевоенный период 41.5 KB
  были открыты Институт точной механики и вычислительной техники Институт радиотехники и электроники Институт прикладной геофизики Институт физической химии Институт атомной энергии Институт ядерных проблем и др. Был создан Институт языкознания АН СССР во главе которого встал академик В. были открыты Институт точной механики и вычислительной техники Институт радиотехники и электроники Институт прикладной геофизики Институт физической химии Институт атомной энергии Институт ядерных проблем и др. Был создан Институт языкознания АН СССР...
33891. Развитие искусства во второй половине 40-х – начале 50-х гг 52 KB
  Тема войны Непринцев Отдых после боя Неменский сестры наши Костецкий Возвращение Лактионов Письмо с фронта. Тема восстановления Яблонская Хлеб Весна. Выдающиеся произведения: тема войны Некрасов В окопах Сталинграда Фадеев Молодая гвардия Казакевич звезда Полевой Повесть о настоящем человеке Твардовский Дом у дороги. Овечкин Районные будни тема деревни.
33892. Внешняя политика СССР в послевоенный период: отношения с Западными странами. Холодная война 54 KB
  Внешняя политика СССР в послевоенный период: отношения с Западными странами. Внешнеполитическая доктрина СССР против поддержки социалистических стран принцип мирного сосуществования. тезис о враждебности капиталистического окружения СССР. Сначала у СССР была мирная внешнеполитическая доктрина затем ужесточилось так же и у США.
33893. СССР и страны Центральной и Восточной Европы в послевоенный период. Роль СССР в формировании мировой системы социализма 35 KB
  СССР и страны Центральной и Восточной Европы в послевоенный период. Роль СССР в формировании мировой системы социализма. В 19451946 существовали коалиционные правительства в Западной Европе потом постепенно произошел переход к коммунистическим режимам: Румыния отречение Михая Болгария конституция 1947 и усиление позиций коммунистов Польша отставка коалиционного правительства Венгрия победа коммунистов на выборах Чехословакия сопротивление события 1948 надежда сохранить отношения и с СССР и с Западом. В сентябре...
33894. Поиск путей обновления общественно-политической жизни в СССР в 1953-1955 гг 37 KB
  Маленков председатель Совмина глава министерства Берия МВД МГБ зам председателя совмина Каганович первый заместитель председателя Совета Министров СССР с 1952 года член Президиума ЦК КПСС Молотов МИД Булганин министр обороны Ворошилов председатель президиума верховного совета. После этого большую власть получил Маленков заявление о группе В нужно поднимать деревню. На ней учредили пост 1 секретаря на который избрали Хрущева доклад Хрущева о с х Январь 1955 пленум ЦК КПСС слушалось дело Маленкова которого обвинили в...
33895. ХХ съезд КПСС и его историческое значение. Борьба с оппозицией в послевоенный период 27.5 KB
  Первоначально преодоление культа личности сводилось к перестройке пропаганды 1953 но Маленков заявил что дело не только в этом ведь этот вопрос связан с вопросом коллективного руководства.1956 доклад Хрущева О культе личности и его последствиях. Идея попытки преодолеть культ личности принадлежит Маленкову а не Хрущеву. Все идеи доклада были повторены в постановлении ЦК: в стране сложился культ личности Сталина вопрос о причинах свелся к личным качествам Сталина опубликованы последние работы Ленина культ личности не...