Форум программистов, компьютерный форум CyberForum.ru

Как закрасить треугольник? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Boyur
 Аватар для Boyur
0 / 0 / 0
Регистрация: 13.12.2007
Сообщений: 15
16.02.2012, 18:38     Как закрасить треугольник? #1
Как мне закрасить треугольники?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include<windows.h>
#include<string.h>
#define  ID_TIMER  1
 
HBRUSH tbrush;
HBRUSH tbrush1;
RECT trect;
long tspeed  = 1; // Скорость шарика
HWND hWnd;
MSG lpMsg;
WNDCLASS w;
HDC hdc;
POINT elips, tr1[4] , tr2[4], tr3[4] ,tr4[4];//кординаты круга и треугольников
const BYTE T[4] ={PT_MOVETO,PT_LINETO,PT_LINETO,PT_LINETO}; //нужно для функции PolyDraw
 
const unsigned int TIMER_2SEC = 2;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void __stdcall TimerProc (HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
 InvalidateRect(hWnd, &trect, TRUE);
                         if((elips.x<270 || tr1[0].y<265) && elips.x<665)// двигатся пока круг не дошёл до середины или треугольники не отдвинулись
                         {
                         elips.x += tspeed;
                         elips.y += tspeed;
                         }
 if(elips.x>269 && tr1[0].y>0)// ждут пока круг не подойдёт поближе и потом двигаются пока треугольник 1 не упрутся в стенку
    for(int i=0;i<4;i++)
    {
        tr1[i].y--;
        tr2[i].x--;
        tr3[i].y++;
        tr4[i].x++;
    }
}
char szProgName[]="Грфические возможности Win32 API";
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
elips.x=25;elips.y=25;
 
tr1[0].x=300;tr1[0].y=300;
tr1[1].x=400;tr1[1].y=300;
tr1[2].x=350;tr1[2].y=350;
tr1[3].x=300;tr1[3].y=300;
 
tr2[0].x=300;tr2[0].y=300;
tr2[1].x=350;tr2[1].y=350;
tr2[2].x=300;tr2[2].y=400;
tr2[3].x=300;tr2[3].y=300;
 
tr3[0].x=300;tr3[0].y=400;
tr3[1].x=350;tr3[1].y=350;
tr3[2].x=400;tr3[2].y=400;
tr3[3].x=300;tr3[3].y=400;
 
tr4[0].x=400;tr4[0].y=300;
tr4[1].x=350;tr4[1].y=350;
tr4[2].x=400;tr4[2].y=400;
tr4[3].x=400;tr4[3].y=300;
// задание кординат
 
//дальше я использовал шаблонный код windows application
w.lpszClassName=szProgName; //имя программы - объявлено выше
w.hInstance=hInstance; //идентификатор текущего приложения
w.lpfnWndProc=WndProc; //указатель на функцию окна
w.hCursor=LoadCursor(NULL, IDC_ARROW); //загружаем курсор
w.hIcon=0; 
w.lpszMenuName=0; 
w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //цвет фона окна
w.style=CS_HREDRAW|CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
 
//Если не удалось зарегистрировать класс окна - выходим
if(!RegisterClass(&w))
return 0;
 
//Создадим окно в памяти, заполнив аргументы CreateWindow
hWnd=CreateWindow(szProgName, //Имя программы
"Грфические возможности Win32 API", //Заголовок окна
WS_OVERLAPPEDWINDOW, //Стиль окна - перекрывающееся
0, //положение окна на экране по х
0, //положение по у
700, //ширина
730, //высота
(HWND)NULL, //идентификатор родительского окна
(HMENU)NULL, //идентификатор меню
(HINSTANCE)hInstance, //идентификатор экземпляра программы
(HINSTANCE)NULL); //отсутствие дополнительных параметров
 
//Выводим окно из памяти на экран
ShowWindow(hWnd, nCmdShow);
//Обновим содержимое окна
UpdateWindow(hWnd);
 
//Цикл обработки сообщений
 
while(GetMessage(&lpMsg, NULL, 0, 0)) {
PeekMessage(&lpMsg, NULL, 0, 0, PM_REMOVE);// нужно для передачи времени    
TranslateMessage(&lpMsg); 
DispatchMessage(&lpMsg);
}
return(lpMsg.wParam); 
}
 
 
 
//Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
       PAINTSTRUCT ps;// структура для рисования
       HGDIOBJ  old;// левая структура
       HDC hdc;// дискриптор усстройство вывода
 
       switch (message) {
             case WM_CREATE:
                    SetTimer(hWnd, ID_TIMER, 2, TimerProc); //установка обработки таймера на функцию TimerProc
                    SetRect(&trect, 0, 0, 1280, 1024);// для прорисовки окна
                    break;
             case WM_PAINT: 
                    hdc = BeginPaint(hWnd, &ps);
                    
                    tbrush = CreateSolidBrush(RGB(0, 255, 0)); // создание кисти
                    old  = SelectObject(hdc, tbrush);// выбор кисти
                    Ellipse(hdc,elips.x-25,elips.y-25,elips.x+25,elips.y+25);// рисуем круг
                    
                    PolyDraw(hdc,tr1,T,4);//рисуем треуголькики
                    PolyDraw(hdc,tr2,T,4);
                    PolyDraw(hdc,tr3,T,4);
                    PolyDraw(hdc,tr4,T,4);
                                    
                    EndPaint(hWnd, &ps);
                    break;
            case WM_DESTROY:
                    DeleteObject(tbrush);
                    KillTimer(hWnd, ID_TIMER);
                    PostQuitMessage(0);
                    break;
            default: return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 18:38     Как закрасить треугольник?
Посмотрите здесь:

C++ Как закрасить шар полностью?
C++ Как закрасить Rectangle
Как закрасить линию? C++
C++ Рисование в Си. Как нарисовать треугольник
Как закрасить круг (circle) C++
Как перевернуть треугольник? C++
C++ Как уместить круг и треугольник друг в друге?
C++ Как найти, сколько окружностей можно вместить в треугольник?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cyberobot
 Аватар для cyberobot
15 / 15 / 1
Регистрация: 01.09.2011
Сообщений: 66
16.02.2012, 19:42     Как закрасить треугольник? #2
HPEN, но оно будет обводить треугольник, а закрасить его не получается

Добавлено через 3 минуты
FillRect(), но закрасится всё поле
Boyur
 Аватар для Boyur
0 / 0 / 0
Регистрация: 13.12.2007
Сообщений: 15
16.02.2012, 22:48  [ТС]     Как закрасить треугольник? #3
А как лучше нарисовать треугольник чтобы его закрасить?

Добавлено через 2 часа 58 минут
Общем нашел как нарисовать.

C++
1
2
3
4
POINT polygon1[9] = { tr1[0].x, tr1[0].y, tr1[1].x, tr1[1].y,tr1[2].x, tr1[2].y,tr1[3].x, tr1[3].y,}; //координаты
tbrush = CreateSolidBrush(RGB(100, 255, 50)); // создание кисти
                    SelectObject(hdc, tbrush);// выбор кисти
   Polygon(hdc, polygon2, 3); //сам треугольник
Yandex
Объявления
16.02.2012, 22:48     Как закрасить треугольник?
Ответ Создать тему
Опции темы

Текущее время: 21:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru