Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 16.05.2015
Сообщений: 67

"Олимпийские кольца": прозрачность и смена цвета

11.11.2015, 23:01. Показов 937. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,создал кольца,но не знаю как их сделать прозрачными и как привязать смену цвета к клавишам.
Надеюсь на помощь)
Само задание:
Написать программу, рисующую олимпийские кольца. По нажатию клавиш с цифрами 1-5 одно из колец с соответствующим номером меняет свой цвет. То же самое происходит при щелчке мыши на одном из колец.

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
142
143
144
145
146
147
148
149
150
#include <windows.h>         // подключение библиотеки с функциями API
 
// Глобальные переменные:
HINSTANCE hInst;    // Указатель приложения
LPCTSTR szWindowClass = "QWERTY";
LPCTSTR szTitle = "ПЕРВАЯ ПРОГРАММА";
 
// Предварительное описание функций
 
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
// Основная программа 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    MSG msg;
 
    // Регистрация класса окна 
    MyRegisterClass(hInstance);
 
    // Создание окна приложения
    if (!InitInstance (hInstance, nCmdShow)) 
    {
        return FALSE;
    }
    // Цикл обработки сообщений
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
    }
    return msg.wParam;
}
 
//  FUNCTION: MyRegisterClass()
//  Регистрирует класс окна 
 
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex; 
    wcex.cbSize = sizeof(WNDCLASSEX); 
    wcex.style          = CS_HREDRAW | CS_VREDRAW;  // стиль окна
    wcex.lpfnWndProc    = (WNDPROC)WndProc; // оконная процедура
    wcex.cbClsExtra     = 0;                        
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;        // указатель приложения
    wcex.hIcon          = LoadIcon(NULL, IDI_HAND);     // определение иконки
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);    // определение курсора
    wcex.hbrBackground  = GetSysColorBrush(COLOR_BTNFACE);   // установка фона
    wcex.lpszMenuName   = NULL;     // определение меню
    wcex.lpszClassName  = szWindowClass;    // имя класса
    wcex.hIconSm        = NULL;
 
    return RegisterClassEx(&wcex); // регистрация класса окна
}
 
// FUNCTION: InitInstance(HANDLE, int)
// Создает окно приложения и сохраняет указатель приложения в переменной hInst
 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   hInst = hInstance; // сохраняет указатель приложения в переменной hInst
 
   hWnd=CreateWindow(szWindowClass, // имя класса окна
 szTitle,   // имя приложения
 WS_OVERLAPPEDWINDOW, // стиль окна
 CW_USEDEFAULT, // положение по Х
 CW_USEDEFAULT,     // положение по Y
 CW_USEDEFAULT,    // размер по Х
 CW_USEDEFAULT,    // размер по Y
 NULL// описатель родительского окна
 NULL,       // описатель меню окна
 hInstance,  // указатель приложения
 NULL);     // параметры создания.
 
   if (!hWnd) // Если окно не создалось, функция возвращает FALSE
   {
      return FALSE;
   }
   ShowWindow(hWnd, nCmdShow);      // Показать окно
   UpdateWindow(hWnd);          // Обновить окно
   return TRUE;             //Успешное завершение функции
}
 
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//  Оконная процедура. Принимает и обрабатывает все сообщения, приходящие в приложение
 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    RECT rt;
    HBRUSH brush;
    switch (message) 
    {
        case WM_CREATE: // Сообщение приходит при создании окна
            break;
            
 
        case WM_PAINT:  // Перерисовать окно
            hdc = BeginPaint(hWnd, &ps);    // Начать графический вывод
            GetClientRect(hWnd, &rt); // Область окна для рисования
            brush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,0));
            SelectObject(hdc,brush);
            Ellipse( hdc,300,  100,200, 200);//1-верхнее
            
             Ellipse( hdc,100,  100,200, 200);//2-верхнее
            
              Ellipse( hdc,300,  100,400, 200);//3-верхнее
            
               Ellipse( hdc,150,  170,250, 270);//1-нижнее
               
                Ellipse( hdc,250,  170,350, 270);//2-нижнее
                EndPaint(hWnd, &ps);    // Закончить графический вывод
            break;
        case WM_LBUTTONDOWN:      
            switch(wParam)
            {
            case VK_NUMPAD1:
 
                break;
            case VK_NUMPAD2:
 
                break;
                case VK_NUMPAD3:
 
                    break;
                    case VK_NUMPAD4:
 
                        break;
                        case VK_NUMPAD5:
 
                            break;
            }
        case WM_DESTROY: // Завершение работы
             PostQuitMessage(0);
            break;
        default: 
// Обработка сообщений, которые не обработаны пользователем
            return DefWindowProc(hWnd, message, wParam, lParam); 
   }
return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2015, 23:01
Ответы с готовыми решениями:

Олимпийские кольца (Builder6)
Олимпийские кольца Image1-&gt;Canvas-&gt;Pen-&gt;Width = 8; Image1-&gt;Canvas-&gt;Brush-&gt;Style = bsClear; Image1-&gt;Canvas-&gt;Pen-&gt;Color =...

Олимпийские кольца
помогите пожалуйста :( Олимпийские кольца. Необходимо вывести на экран цветное изображение олимпийского логотипа в виде пяти...

Олимпийские кольца.
Люди помогите))) как сделать прогу на делфи что б (изобразить олимпийские кольца. показать циклическую смену цвета колец) а то ваще...

1
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
15.11.2015, 03:40
Perdywok, объявляйте массив из нескольких цветов, указывайте текущий индекс. В CreateHatchBrush передавайте элемент, заданный данным индексом. А в обработке сообщения нажатия клавиши меняйте текущий индекс на какой пожелаете. А вот насчёт прозрачности не помню, но уверен, что это хорошо гуглится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2015, 03:40
Помогаю со студенческими работами здесь

Олимпийские кольца
Цель работы - создать программу, которая на поверхности формы рисует олимпийский флаг. И дан примерный код: unit Unit1; ...

Олимпийские кольца! помогите!
Програма вырисовует на канве Олимпийские кольца разного цвета, причем кольца появляются через некоторый интервал времени. Когда начертится...

Нарисовать олимпийские кольца
Составьте программу рисования 5 разноцветных олимпийских колец (верхний ряд: голубое, черное, красное; нижний ряд: желтое и зеленое)....

Олимпийские кольца разных цветов
Здраствуйте:) Как в ассемблере реализовать Олимпийские кольца. 5 окружностей, разных цветов.

Плавная смена цвета при наведении + смена цвета в зависимости от свойства Checked
Привет, хочу сделать чтобы когда IsChecked = false то при наведении кнопка плавно меняла цвет на Gray при увидении на Black, когда кнопка...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru