Similar presentations:
C (графика для КП)
1. Программирование графики на C/C++
Использование библиотекиWindows.h
2.
2Структура графической программы
#include <windows.h>
#include <conio.h>
void main()
{
библиотека для
работы с графикой
получить дескриптор
окна, используемого
консолью
HWND hwn = GetConsoleWindow();
HDC hdc = GetDC(hwn);
получить дескриптор
... // рисуем на экране контекста устройства
(Device Context (DC))
getch();
ReleaseDC(hwnd,hdc);
}
чтобы посмотреть
результат
3.
3Система координат
(0,0)
y
x
Y
(x,y)
4.
4Цвета
system("color XY");
// X – цвет фона Y – цвет шрифта
Название
Код
Название
Код
0
BLACK
8
GRAY
1
BLUE
9
LIGHT BLUE
2
GREEN
A
LIGHT GREEN
3
AQUA
B
LIGHT AQUA
4
RED
C
LIGHT RED
5
PURPLE
D
LIGHT PURPLE
6
YELLOW
E
LIGHT YELLOW
7
WHITE
F
BRIGHT WHITE
system("color F1"); // установить синий
// цвет текста на белом фоне
5.
5Цвета
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
получить окно, в котором нужно изменить цвет
SetConsoleTextAttribute(h, …цвет…);
BACKGROUND_ – для фона
FOREGROUND_ – для текста
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED |
FOREGROUND_GREEN | FOREGROUND_INTENSITY);
6.
6Полная палитра цветов
цвет =
R
+
G
+
B
Red
Green
Blue
красный зеленый синий
0..255
0..255
0..255
R = 218
G = 164
B = 32
R = 135
G = 206
B = 250
Пример цветов в C++:
RGB(0,0,0)
черный
RGB(255, 0, 0)
красный
RGB(0, 255, 0)
зеленый
RGB(0, 0, 255)
синий
RGB(255, 255, 255)
белый
RGB(100, 100, 100)
серый
RGB(255, 0, 255)
фиолетовый
! Всего возможно разных цветов!!!
256·256·256 = 16 777 216 (True Color)
7.
7Управление цветом
Цвет и стиль линии:
Целое число
HPEN CreatePen(стиль, ширина, цвет);
PS_SOLID
PS_DASH
PS_DOT
PS_DASHDOT
PS_DASHDOTDOT
PS_NULL
0
1
2
3
4
5
Сплошное перо
Пунктирное перо
Штриховое перо
Штрих-пунктир
Две точки-пунктир
Невидимое перо
R
G
B
CreatePen(PS_SOLID, 3, RGB(255,255,0));
8.
8Управление цветом
Цвет и стиль заливки:
HBRUSH CreateSolidBrush(цвет кисти);
void main(){
HDC hdc = GetDC(hwn);
HPEN pen1 = CreatePen(PS_DASH, 2, RGB(140, 90, 10));
HPEN pen2 = CreatePen(PS_DASHDOT, 3, RGB(11, 4, 3));
HBRUSH brush1 = CreateSolidBrush(RGB(20, 33, 100));
HBRUSH brush2 = CreateSolidBrush(RGB(111, 113, 90));
SelectObject(hdc, pen2);
... // рисуем на экране
дескриптор контекста
устройства
дескриптор
объекта
SelectObject(hdc, pen1); SelectObject(hdc, brush2);
... // рисуем на экране
}
9.
9Точки, отрезки и ломаные
(x, y)
контекст
(x2, y2)
(x5, y5)
цвет
SetPixel(hdc, x, y, RGB(0,0,255));
(x1, y1)
(x1, y1)
координаты
(x2, y2)
HPEN pen1 = CreatePen(PS_DASH,
2, RGB(0, 255, 0));
SelectObject(hdc, pen1);
MoveToEx(hdc, x1, y1, null);
LineTo(hdc, x2, y2);
HPEN pen2 = CreatePen(PS_DASH,
3, RGB(255, 0, 0));
SelectObject(hdc, pen2);
(x3, y3) MoveToEx(hdc, x1, y1, null);
LineTo(hdc, x2, y2);
LineTo(hdc, x3, y3);
LineTo(hdc, x4, y4);
(x4, y4)
LineTo(hdc, x5, y5);
10.
Прямоугольники(x1, y1)
(x2, y2)
(x1, y1)
стиль
(0 - сплошная)
HPEN pen1 = CreatePen(PS_DASH,
2, RGB(0, 0, 255));
SelectObject(hdc, pen1);
Rectangle(hdc, x1, y1, x2, y2);
цвет
HBRUSH brush1 = CreateSolidBrush
(RGB(255,0,0));
SelectObject(hdc, brush1);
(x2, y2) Rectangle(hdc, x1, y1, x2, y2);
(x1, y1)
HPEN pen1 = CreatePen(PS_DASH,
2, RGB(0, 0, 255));
SelectObject(hdc, pen1);
HBRUSH brush1 = CreateSolidBrush
(RGB(255,0,0));
(x2, y2) SelectObject(hdc, brush1);
Rectangle(hdc, x1, y1, x2, y2);
10
11.
11Окружность, заливка, текст
circle
Ellipse(hdc, x-R, y-R, x+R, x+R);
(x-R, y-R)
R
стиль
(1 - сплошная)
(x, y)
цвет границы
(x+R, y+R)
(x, y)
pen1 = CreatePen(PS_DASH,
2, RGB(255, 0, 0));
b = CreateSolidBrush
(RGB(255, 0, 255));
цвет
заливки
(x, y)
Влад
Малахов
указатель на
строку текста
WORD nSize; TCHAR str[100];
nSize = wsprintf(str, TEXT("%s"),
«Влад Малахов»);
TextOut(hdc, x, y, str, nSize);
12.
12Пример
HWND hwn = GetConsoleWindow();
RECT rect;
Получить
GetClientRect(hwn, &rect);
const int c = rect.right / 2,
параметры окна
d = rect.bottom/ 2, k = 100;
HPEN pen = CreatePen(PS_DASH, 2, RGB(140,90,10));
SelectObject(hdc, pen);
// ось X
MoveToEx(hdc, 0, d, NULL); LineTo(hdc, c * k, d);
// ось Y
MoveToEx(hdc, c, 0, NULL); LineTo(hdc, c, k * d);
(c, d)
(right, bottom)
13.
13Пример
bool first = true; double x, F, h = 0.001;
for (x = a; x <= b; x += h) { // x ∈ [a, b]
F = x * cos(x / 2); // функция из лаб. раб. 3_2
if (first) { // начальная точка отрезка
SelectObject(hdc, penF);
MoveToEx(hdc, c + k * x, d - k * F, NULL);
first = false;
} // конечная точка отрезка
else LineTo(hdc, c + k * x, d - k * F);
}
(c, d)
14.
14Замечание
Для Windows 11
programming