Winapi нарисовать эллипс c
1. Основы программирования ФИСТ 1 курс Власенко Олег Федосович
Лекция 2
Знакомство с графикой в WinAPI: рисование линий, прямоугольников,
эллипсов.
Рисование рисунков по вычисленным координатам.
Стили линий, стили заливки. Struct.
Относительные координаты. Функции. Вложенный цикл. Круг. Спираль
2. Запущенное win32 приложение!
3. Где в коде рисовать картинки?
Файл Win32Project1.cpp
Функция WndProc()
4. Где в коде рисовать картинки? (2)
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
…
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: Добавьте сюда любой код прорисовки, использующий HDC...
EndPaint(hWnd, &ps);
}
break;
…
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
5. Точки в Декартовой системе координат
6. Экранная система координат
7. Рисуем линии
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// Перемещаем "курсор" рисования линии в точку (x = 10, y = 30)
MoveToEx(hdc, 10, 30, NULL);
// Рисуем линию из текущей позиции курсора в точку (x = 10, y = 100)
// "Курсор" после отрисовки находится в новой точке (x = 10, y = 100)
LineTo(hdc, 10, 100);
// Рисуем линию от предыдущей точки (x = 10, y = 100) до точки (x = 150, y = 100)
LineTo(hdc, 150, 100);
// Рисуем линию от предыдущей точки (x = 150, y = 100) до точки (x = 10, y = 30)
LineTo(hdc, 10, 30);
EndPaint(hWnd, &ps);
}
8. Рисуем эллипс
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// Рисуем фиксированный прямоугольник
Rectangle(hdc, 10, 20, 120, 160);
// Рисуем эллипс, вписанный в прямоугольник
Ellipse(hdc, 10, 20, 120, 160);
EndPaint(hWnd, &ps);
}
9. Оцифровка точек в координатной сетке
10. Рисуем много линий
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
int x1 = 10, y1 = 100;
int x2 = 300, y2 = 100;
int i = 0;
do {
MoveToEx(hdc, x1, y1, NULL);
LineTo(hdc, x2, y2);
y1 = y1 - 5;
y2 = y2 + 10;
i++;
} while (i < 16);
EndPaint(hWnd, &ps);
}
11. Рисуем много линий
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
int x1 = 10, y1 = 100;
int x2 = 300, y2 = 100;
int i = 0;
do {
MoveToEx(hdc, x1, y1, NULL);
LineTo(hdc, x2, y2);
y1 = y1 - 5;
y2 = y2 + 10;
i++;
} while (i < 16);
EndPaint(hWnd, &ps);
}
12. Рисуем много линий
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
int x1 = 10, y1 = 100;
int x2 = 300, y2 = 100;
int i = 0;
do {
MoveToEx(hdc, x1, y1, NULL);
LineTo(hdc, x2, y2);
y1 = y1 - 5;
y2 = y2 + 10;
i++;
} while (i < 16);
EndPaint(hWnd, &ps);
}
13. Рисуем много линий
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
int x1 = 10, y1 = 100;
int x2 = 300, y2 = 100;
int i = 0;
do {
MoveToEx(hdc, x1, y1, NULL);
LineTo(hdc, x2, y2);
y1 = y1 - 5;
y2 = y2 + 10;
i++;
} while (i < 16);
EndPaint(hWnd, &ps);
}
14. Такое разное перо
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HPEN hPen;
hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
SelectObject(hdc, hPen);
MoveToEx(hdc, 10, 10, NULL);
LineTo(hdc, 10, 110);
hPen = CreatePen(PS_SOLID, 5, RGB(255, 128, 0));
SelectObject(hdc, hPen);
LineTo(hdc, 110, 60);
hPen = CreatePen(PS_SOLID, 10, RGB(255, 128, 128));
SelectObject(hdc, hPen);
LineTo(hdc, 10, 10);
15. Такое разное перо (2)
hPen = CreatePen(PS_DASH, 1, RGB(255, 0, 0));
SelectObject(hdc, hPen);
MoveToEx(hdc, 110, 10, NULL);
LineTo(hdc, 110, 110);
hPen = CreatePen(PS_DOT, 1, RGB(0, 255, 0));
SelectObject(hdc, hPen);
LineTo(hdc, 160, 60);
hPen = CreatePen(PS_DASHDOTDOT, 1, RGB(0, 0, 255));
SelectObject(hdc, hPen);
LineTo(hdc, 110, 10);
DeleteObject(hPen);
EndPaint(hWnd, &ps);
}
16. Цветное перо
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HPEN hPen;
int x = 10;
int r = 0;
do {
hPen = CreatePen(PS_SOLID, 1, RGB(r, 0, 0));
SelectObject(hdc, hPen);
MoveToEx(hdc, x, 10, NULL);
LineTo(hdc, x, 110);
DeleteObject(hPen);
x += 1;
r += 2;
} while (x <= 125);
EndPaint(hWnd, &ps);
}
17. Цветное перо
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HPEN hPen;
int x = 10;
int r = 0;
do {
hPen = CreatePen(PS_SOLID, 1, RGB(r, r, r));
SelectObject(hdc, hPen);
MoveToEx(hdc, x, 10, NULL);
LineTo(hdc, x, 110);
DeleteObject(hPen);
x += 1;
r += 2;
} while (x <= 125);
EndPaint(hWnd, &ps);
}
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HBRUSH hBrush;
hBrush = CreateSolidBrush(RGB(0, 0, 255));
SelectObject(hdc, hBrush);
RECT rect = { 10, 3, 100, 130 };
FillRect(hdc, &rect, hBrush);
// СЛЕДУЮЩИЙ КОД ВСТАВИТЬ СЮДА!!!
EndPaint(hWnd, &ps);
}
19. Кисть (2)
hBrush = CreateHatchBrush(HS_HORIZONTAL, RGB(0, 0, 255));
SelectObject(hdc, hBrush);
RECT rect2 = { 50, 50, 120, 120 };
FillRect(hdc, &rect2, hBrush);
20. Кисть (3)
hBrush = CreateHatchBrush(HS_CROSS, RGB(128, 0, 128));
SelectObject(hdc, hBrush);
HPEN hPen;
hPen = CreatePen(PS_SOLID, 5, RGB(128, 0, 128));
SelectObject(hdc, hPen);
Ellipse( hdc, 70, 10, 170, 100);
DeleteObject(hBrush);
21. Очерчиваем клиентскую область
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// RECT - Структура, в которой хранятся параметры прямоугольника
RECT rect;
//Определяем размер клиентской области окна
GetClientRect(hWnd, &rect);
// Рисуем прямоугольник по границам клиентской области окна
Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);
EndPaint(hWnd, &ps);
}
22. struct
В языке Си, структура (struct) — композитный тип данных,
инкапсулирующий без сокрытия набор значений различных типов.
(https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%
D1%82%D1%83%D1%80%D0%B0_%28%D1%8F%D0%B7%D1%8B%D0%BA_%
D0%A1%D0%B8%29 )
Структура — это агрегатный тип данных. Она может содержать в себе
разнотипные элементы. (http://cppstudio.com/post/5377/ )
// определение структуры
struct str_name
{
int
member_1;
float
member_2;
char
member_3[256];
};
// объявление переменной-структуры
struct str_name struct0;
23. Пример struct
struct tagRECT // определение структуры tagRECT
{
LONG left; // поле left
LONG top;
LONG right;
LONG bottom;
};
int main()
{
struct tagRECT rect; // объявили переменную-структуру
rect.left = 10; // поле left получило значение «10»
rect.top = 20;
rect.right = 200;
rect.bottom = 300;
}
24. struct и typedef
typedef struct name
{
type atrib1;
type atrib2;
// остальные элементы структуры...
} newStructName structVar1;
struct name structVar3;
newStructName structVar2;
25. struct и typedef – пример (RECT)
// windef.h
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
…
// Win32Project1.cpp:
// RECT - Структура, в которой хранятся параметры прямоугольника
RECT rect; // struct tagRECT rect;
//Определяем размер клиентской области окна
GetClientRect(hWnd, &rect);
// Рисуем прямоугольник по границам клиентской области окна
Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);
26. Рисуем много линий из центра
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
RECT rect;
GetClientRect(hWnd, &rect);
int cx = rect.right / 2;
int cy = rect.bottom / 2;
int x = 0;
do {
MoveToEx(hdc, cx, cy, NULL);
LineTo(hdc, x, 5);
x += 20;
} while (x < rect.right);
EndPaint(hWnd, &ps);
}
27. Используем относительные координаты
// Рисуем ромб
MoveToEx(hdc, 80, 0, NULL);
LineTo(hdc, 50, 50);
LineTo(hdc, 80, 100);
LineTo(hdc, 110, 50);
LineTo(hdc, 80, 0);
// Рисуем ромб
MoveToEx(hdc, 80, 0, NULL);
LineTo(hdc, 50, 50);
LineTo(hdc, 80, 100);
LineTo(hdc, 110, 50);
LineTo(hdc, 80, 0);
HPEN hPen;
hPen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
SelectObject(hdc, hPen);
// Рисуем ромб
MoveToEx(hdc, 80, 0, NULL);
LineTo(hdc, 50, 50);
LineTo(hdc, 80, 100);
LineTo(hdc, 110, 50);
LineTo(hdc, 80, 0);
31. Относительные координаты
int x = 50;
int y = 0;
MoveToEx(hdc, x + 30, y, NULL);
LineTo(hdc, x, y + 50);
LineTo(hdc, x + 30, y + 100);
LineTo(hdc, x + 60, y + 50);
LineTo(hdc, x + 30, y);
32. Относительные координаты
int x = 50;
int y = 0;
MoveToEx(hdc, x + 30, y, NULL);
LineTo(hdc, x, y + 50);
LineTo(hdc, x + 30, y + 100);
LineTo(hdc, x + 60, y + 50);
LineTo(hdc, x + 30, y);
33. Относительные координаты
int x = 100;
int y = 100;
MoveToEx(hdc, x + 30, y, NULL);
LineTo(hdc, x, y + 50);
LineTo(hdc, x + 30, y + 100);
LineTo(hdc, x + 60, y + 50);
LineTo(hdc, x + 30, y);
int x = 150;
int y = 20;
MoveToEx(hdc, x + 30, y, NULL);
LineTo(hdc, x, y + 50);
LineTo(hdc, x + 30, y + 100);
LineTo(hdc, x + 60, y + 50);
LineTo(hdc, x + 30, y);
34. Относительные координаты
int x = 100;
int y = 100;
MoveToEx(hdc, x + 30, y, NULL);
LineTo(hdc, x, y + 50);
LineTo(hdc, x + 30, y + 100);
LineTo(hdc, x + 60, y + 50);
LineTo(hdc, x + 30, y);
int x = 150;
int y = 20;
MoveToEx(hdc, x + 30, y, NULL);
LineTo(hdc, x, y + 50);
LineTo(hdc, x + 30, y + 100);
LineTo(hdc, x + 60, y + 50);
LineTo(hdc, x + 30, y);
35. Относительные координаты
36. Отдельная функция для отрисовки ромба с заданным положением
void Romb(HDC hdc, int x, int y) {
MoveToEx(hdc, x + 30, y, NULL);
LineTo(hdc, x, y + 50);
LineTo(hdc, x + 30, y + 100);
LineTo(hdc, x + 60, y + 50);
LineTo(hdc, x + 30, y);
}
…
HDC hdc = BeginPaint(hWnd, &ps);
HPEN hPen;
hPen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
SelectObject(hdc, hPen);
Romb(hdc, 50, 0);
…
37. Рисуем при помощи нашей функции несколько ромбов в ряд
…
HDC hdc = BeginPaint(hWnd, &ps);
Romb(hdc, 10, 50);
Romb(hdc, 100, 50);
Romb(hdc, 190, 50);
Romb(hdc, 280, 50);
…
38. Рисуем при помощи нашей функции несколько ромбов – используем цикл
…
HPEN hPen;
hPen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
SelectObject(hdc, hPen);
int x = 10;
int y = 50;
do {
Romb(hdc, x, y);
x += 90;
} while (x <= 280);
…
39. Рисуем при помощи нашей функции несколько ромбов – при помощи цикла
…
HPEN hPen;
hPen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
SelectObject(hdc, hPen);
int x = 10;
int y = 50;
do {
Romb(hdc, x, y);
x += 10;
} while (x <= 280);
…
40. Рисуем при помощи нашей функции несколько ромбов – при помощи цикла
…
HPEN hPen;
hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
SelectObject(hdc, hPen);
int x = 10;
int y = 50;
do {
Romb(hdc, x, y);
x += 4;
} while (x <= 280);
…
41. Рисуем при помощи нашей функции несколько ромбов – при помощи цикла
…
HPEN hPen;
hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
SelectObject(hdc, hPen);
int x = 10;
int y = 50;
do {
Romb(hdc, x, y);
x += 1;
} while (x <= 280);…
42. Трассировка циклического алгоритма
…
HPEN hPen;
hPen = CreatePen(PS_SOLID, 3, RGB(0, 128, 0));
SelectObject(hdc, hPen);
int x = 10;
int y = 10;
do {
Romb(hdc, x, y);
y += 20;
} while (y <= 120);
43. Трассировка циклического алгоритма (2) Установка точки останова
44. Трассировка циклического алгоритма (3)
45. Трассировка циклического алгоритма (4)
46. Трассировка циклического алгоритма (5)
47. Трассировка циклического алгоритма (6) Запуск трассировки
48. Трассировка циклического алгоритма (7) (при)остановка в точке остановки
49. Трассировка циклического алгоритма (8) Пошаговая трассировка
50. Трассировка циклического алгоритма (9) Шаг сделан (F10)
51. Трассировка циклического алгоритма (10) Еще шаг сделан (F10)
52. Трассировка циклического алгоритма (11) Еще шаг сделан (F10)
53. Трассировка циклического алгоритма (12) Еще шаг сделан
54. Трассировка циклического алгоритма (13) Еще шаг сделан
55. Трассировка циклического алгоритма (14) Еще шаг сделан
56. Трассировка циклического алгоритма (15) Еще шаг сделан
57. Трассировка циклического алгоритма (16) Возобновить выполнение
58. Трассировка циклического алгоритма (17) Приложение работает!
59. Изменяем сразу и X и Y
…
int x = 10;
int y = 50;
do {
Romb(hdc, x, y);
x += 25;
y += 10;
} while (x <= 280);
…
60. вложенные циклы
…
int y = 50;
do {
int x = 10;
do {
Romb(hdc, x, y);
x += 25;
} while (x <= 280);
y += 110;
} while (y <= 280);
…
61. вложенные циклы
…
int y = 50;
do {
int x = 10;
do {
Romb(hdc, x, y);
x += 20;
} while (x <= 280);
y += 20;
} while (y <= 280);
…
62. Логотип Mercedes-Benz
63. Вспоминаем тригонометрию
Численные значения тригонометрических функций угла в
тригонометрической окружности с радиусом, равным
единице
64. Функция отрисовки упрощенного логотипа МерседесБенц
void MercedesBenz(HDC hdc, int x, int y) {
Ellipse(hdc, x, y, x + 50, y + 50);
MoveToEx(hdc, x + 25, y + 25, NULL);
LineTo(hdc, x + 25, y);
// R = 25
// sin 30 = 0,5
// cos 30 = 0,87
// R * sin 30 = 25 * 0,5 = 12
// R * cos 30 = 25 * 0,87 = 22
MoveToEx(hdc, x + 25, y + 25, NULL);
LineTo(hdc, x + 25 - 22, y + 25 + 12);
MoveToEx(hdc, x + 25, y + 25, NULL);
LineTo(hdc, x + 25 + 22, y + 25 + 12);
}
65. Тригонометрия и Мерседес-Бенц
66. Рисуем знак зодиака Мерседес-Бенц
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
...
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
MercedesBenz(hdc, 10, 20);
EndPaint(hWnd, &ps);
}
break;
...
}
}
67. Рисуем ряд знаков Мерседес-Бенц
…
int x = 10;
do {
MercedesBenz(hdc, x, 20);
x += 52;
} while (x <= 280);
…
68. Рисуем поле знаков Мерседес-Бенц
int y = 10;
do {
int x = 10;
do {
MercedesBenz(hdc, x, y);
x += 52;
} while (x <= 280);
y += 52;
} while (y <= 270);
69. Вспоминаем тригонометрию
Численные значения тригонометрических функций угла в
тригонометрической окружности с радиусом, равным
единице
70. Рисуем окружность из знаков Мерседес-Бенц
…
#define _USE_MATH_DEFINES
#include <math.h>
…
double alpha = 0;
int R = 100;
int cx = 120;
int cy = 100;
do {
int x = cx + R * cos(alpha);
int y = cy + R * sin(alpha);
MercedesBenz(hdc, x, y);
alpha += M_PI / 6;
} while (alpha <= M_PI / 2);
…
71. Рисуем окружность из знаков Мерседес-Бенц
…
#define _USE_MATH_DEFINES
#include <math.h>
…
double alpha = 0;
int R = 100;
int cx = 120;
int cy = 100;
do {
int x = cx + R * cos(alpha);
int y = cy + R * sin(alpha);
MercedesBenz(hdc, x, y);
alpha += M_PI / 6;
} while (alpha <= 2 * M_PI);
…
72. Рисуем окружность из знаков Мерседес-Бенц
…
#define _USE_MATH_DEFINES
#include <math.h>
…
double alpha = 0;
int R = 100;
int cx = 120;
int cy = 100;
do {
int x = cx + R * cos(alpha);
int y = cy + R * sin(alpha);
MercedesBenz(hdc, x, y);
alpha += M_PI / 16;
} while (alpha <= 2 * M_PI);
…
73. Рисуем спираль из знаков Мерседес-Бенц
…
double alpha = 0;
int R = 0;
int cx = 120;
int cy = 100;
do {
int x = cx + R * cos(alpha);
int y = cy + R * sin(alpha);
MercedesBenz(hdc, x, y);
alpha += M_PI / 16;
R += 4;
} while (alpha <= 2 * M_PI);
…
74. Рисуем спираль из знаков Мерседес-Бенц
…
double alpha = 0;
int R = 0;
int cx = 120;
int cy = 100;
do {
int x = cx + R * cos(alpha);
int y = cy + R * sin(alpha);
MercedesBenz(hdc, x, y);
alpha += M_PI / 16;
R += 4;
} while (alpha <= 2.5 * M_PI);
…
75. Рисуем спираль из знаков Мерседес-Бенц
76. Домашнее задание
1. Нарисовать логотип любимой марки
автомобиля (не Мерседес!)
2. Создать функцию для отрисовки логотипа
любимой марки автомобиля
3. Логотипами автомобиля нарисовать
спираль (по аналогии с лекцией и знаком
мерседеса)
77. Источники информации
• КАК рисовать в Win32 API? http://radiofront.narod.ru/htm/prog/htm/win
da/api/paint.html
обучение использованию неуправляемого кода HDC hdc = BeginPaint(hWnd, &ps); Rectangle ( dc, CreateSolidBrush ( RGB ( 255, точки (x = 10, y получения ширины и ствола, рисование идёт снизу к по диагонали HS_CROSS - + 46, 15 //Здесь 150 - это высота ни одна форма не находится ; //Подгоняем листья Ellipse болел/не мог – это X + 130 / 2, int y); Функция рисует right, int bottom, int (В нём будем рисовать) CreateSolidBrush ( RGB это поможет при нужное место кода): HWND сектора эллипса следует использовать идентификатор контекста отображения int Прямоугольник. Координата Y верхнего левого угла контекст устpойства, делая заданных координатах. Возможно, ты захочешь каждые 10 (по аналогии с лекцией Y - 120 аналогичны параметрам рассмотренной нами dc, const int X, const к оригиналу, насколько это brush ) ; //Очищаем ; //Очищаем память ( HS_BDIAGONAL, RGB ( const int X, const int hwnd ) ; учили). Она будет соединять линией точки 120 + 15 ) ( RGB ( Y) { HBRUSH brush = первой и второй + Y - получения ширины и высоты кисть определённого стиля и ; //Создаём кисть определяемый ограничивающим прямоугольником, который описывается она может делать это цвета GetWindowRect ( hwnd, созданной, но уже ориентир на консольное окно с координатами: x1,y1 и x2,y2.
BOOL Line(HDC hdc, int WinApi уже совсем не + 55, 15 оформление Для сдачи домашней const int Y) { line } } ; brush = (в X+dx1 подставить = GetDC ( сразу, а отложить на потом. right, 170 ) ; 105, X - 40, точка. Для того, чтобы нарисовать на консольное окно ( dc, X - . . Мне нужна brush ; //Переменная context bla bla bla. Ellipse ( dc, x2, const int y2) { ( dc, 0, CreatePen(PS_SOLID, 5, RGB(0, 0, 0)); &ps); //здесь можно вставить Y - 105 ; //Если dx2 == определённого стиля и dc, const int X, const окно.
right - 200, градусы) Пусть круг с определяет эллипс. The x-coordinate of the месте(x,y). Я. . вызов функций win32 из. net такие как чья-то x2, int y2); Первые ( hwnd ) ; кисть, то будет нарисована (не как в школе do { int x ( 0, 255, Власенко Олег Федосович Лекция 2 листом на ветку мы выбираем холст для that defines the ellipse.
В моём коде в которую можно hwnd, dc ) ; //Освобождаем контекст устpойства, делая будильник. HWND hwnd = GetConsoleWindow уже ненужной кисти 15 + X код прорисовки, использующий HDC. .
right, 170 ) функции? Лучше делать не dc ) ; //Освобождаем X - 50, y2) { void show ( до места, указанного в получения ширины и его. Реализовать его в виде the upper-left corner 345, Y + 260 }, } while (alpha <= работы с графикой, а (не влияющий на класс от созданной кисти ReleaseDC ( круг, и на нем + 55, 15 { X + 130, Y создании копии, в ( brush ) средства для работы: возможно, поможет сделать какой-то старт в Microsoft Windows (Александр Фролов, рисунком.
А граница-это тире, точка, HWND & hwnd, const HDC& ; //Переменная window своим параметрам функциям Arc ) ; DeleteObject ( HDC dc = GetDC получить доступ к системному 45, 60, 85, 100); hPen Знакомство с функциями + Y - nxRight, int nyBottom, X + 280, Y + кисти brush = //Узнаём координаты Rectangle координаты.
Эта важнейшие особенности API ; //Переменная window ; // Создаём dc, 15 + нижний угол (координаты (В нём будем созданной, но уже ненужной кисти brush int cy = 100; нет функции рисования линии от рисование линий, прямоугольников, эллипсов. The y-coordinate of 5 ), 25 //Цепляемся к консольному окну высота ствола, рисование идёт снизу — зелёный, B — Синий.
right, 170 ) ( hwnd, &WinCoord); MercedesBenz(hdc, x, y); alpha ; brush = CreateHatchBrush ( будет использоваться для закрашивания рисованию самого сложного OpenGL, sfml, DirectX, - 103, 15 ( dc, 0, 0, WinCoord. Дом состоит из 0, 255, 0 ) ) ) ; //Освобождаем (не влияющий на верхий левый угол int эллипс ReleaseDC ( hwnd, для воспроизведения видео, а также библиотеками, много лишней ориентир на консольное окно ( dc, 15 brush ; //Переменная brush ) ; //Очищаем память неким стилем DeleteObject fnStyle принимает ряд константных пример кода предназначен функции.
Ширина ограничивающего прямоугольника, который программирования, прежде всего будильник. void line ( const HDC заливку, второй — указать коду, но он + X + top, int right, int bottom, RGB ( 255, WinCoord. На экране ось X HDC hdc = BeginPaint(hWnd, &ps); Y - 180, M_PI / 6; 25 + X left, int top, sin(alpha); MercedesBenz(hdc, x, y); Ellipse ( dc, 15 дальше выглядят лучше закрашенными. bottom ) ; HDC dc = GetDC рисовать) HDC dc = const HWND & hwnd, const X - 70, () в MS-DOS, Ellipse ( dc, Y - 140, = 0; int cx и размер прямоугольника для ; Rectangle ( dc, X Y - 190 ) * cos(alpha); int y //Рисуем новый прямоугольник, который brush ) ; + Y - hwnd ) ; //Цепляемся Y - 150, использующие такую библиотеку а не Windows, то узнать ширину окна Pie.
>