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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Liquil
218 / 203 / 32
Регистрация: 04.12.2013
Сообщений: 921
#1

Изобразить этот эллипс, чтобы он мигал — желтый/черный - C++

16.05.2014, 01:18. Просмотров 236. Ответов 2
Метки нет (Все метки)

Здравствуйте, вот есть код, задача: изобразить этот эллипс, чтобы он мигал - желтый/черный, в общем такая мигающая "растровая" лампочка. Фрагмент кода предоставлен ниже, попробовал сделать этот через цикл - если счетчик четный - 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
#include <windows.h>
#include <iostream>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <conio.h>
 
HDC hdc;
PAINTSTRUCT ps;
POINT point;
COLORREF rgb;
HPEN pen;
HBRUSH hbr;
int N=5;
int i;
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    
    switch(Message) {
        
        case WM_DESTROY: {
            PostQuitMessage(0);
            break;
        }
        case WM_PAINT: { //рисуем окно
        
            hdc = BeginPaint(hwnd, &ps);
            //рисуем 
            
        //вот тут начинаются неудачи
 
            for (i=0; i<N; i++)
             if (i%2<1) 
              {
              rgb = RGB(255,255,0); 
              pen = CreatePen(PS_SOLID,1,rgb);
              hbr = CreateSolidBrush(rgb);
              SelectObject(hdc, pen); // выбор пера
              SelectObject(hdc, hbr); // выбор кисти
              Ellipse(hdc, 150, 5, 350, 140); 
              DeleteObject(hbr);
              DeleteObject(pen);
              getch();
              }
               else {rgb = RGB(0,0,0); 
                     pen = CreatePen(PS_SOLID,1,rgb);
                     hbr = CreateSolidBrush(rgb);
                     SelectObject(hdc, pen); // выбор пера
                     SelectObject(hdc, hbr); // выбор кисти
                     Ellipse(hdc, 150, 5, 350, 140); 
                     DeleteObject(hbr);
                     DeleteObject(pen);
                     getch();
                    }       
            
            
            // освобождаем дескрипторы
            EndPaint(hwnd, &ps);
            
        
            break;
        }
        
        
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc; 
    HWND hwnd; 
    MSG Msg; 
 
    
    memset(&wc,0,sizeof(wc));
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.lpfnWndProc   = WndProc; 
    wc.hInstance     = hInstance;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    
    
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); 
        wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION); 
 
    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
 
    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Пример работы с канвой",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 
        CW_USEDEFAULT, 
        640, 
        480, 
        NULL,NULL,hInstance,NULL);
 
    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
 
 
    while(GetMessage(&Msg, NULL, 0, 0) > 0) { 
        TranslateMessage(&Msg); 
        DispatchMessage(&Msg); 
        
    }
    return Msg.wParam;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 01:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изобразить этот эллипс, чтобы он мигал — желтый/черный (C++):

Построить темно серый ромб и желтый эллипс - Pascal ABC
РЕбят помогите. Нужно построить темно серый ромб и желтый эллипс. Заранее спасибо

Изобразить на экране эллипс (MFC) - Visual C++
Используя библиотеку классов MFC, изобразить на экране эллипс, который увеличивается в размерах на 2 пикселя в секунду. а по прошествии 30...

Изобразить окружность и показать ее сжатие в эллипс - Free Pascal
Изобразить окружность и показать ее сжатие в эллипс.

куда вставить фокус в проге, чтобы при ее запуске сразу курсор мигал? - C#
textBoxSource.Focus(); так работает, но если вставлять в { InitializeComponent(); ...

Как зарисовать квадрат, и сделать так, чтобы он мигал по кругу с интервалом 1-4 сек - Pascal ABC
как зарисовать квадраты . И сделать так что бы они мигали по кругу с интервалом 1-4 сек. Помогите немогу понять как. Очень прошу. ...

Как изобразить этот текст ? - HTML, CSS
Браузер видит это как Heading ....я просто хочу изображать &lt;h2&gt;Название&lt;/h2&gt; как текст в браузере. Вот так не получаеться: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
16.05.2014, 01:36 #2
Liquil, идея вот такая:
C++
1
2
3
4
5
6
7
8
9
    while (!exit)
    {
        int input = get_input();
        // change elips color
        if (input == exit_token)
        {
            exit = true;
        }
    }
Liquil
218 / 203 / 32
Регистрация: 04.12.2013
Сообщений: 921
16.05.2014, 01:39  [ТС] #3
outoftime, я немного не понял, куда здесь вставить часть с рисованием?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2014, 01:39
Привет! Вот еще темы с ответами:

MessageBox: Как сделать так, чтобы если окно модальное, при клике на родительское окно MessageBox мигал? - C++ WinAPI
Здравия всем! Никак не найду нужный MB_*, как можно сделать так, чтобы если сделать MessageBox модальным, при клике по родительскому...

Расположение объектов, чтобы функция их не стирала (эллипс , парабола) - Delphi
Суть проблемы : Вроде Canvas.Brush.Color:=Color; должна стирать прошлое положение эллипса , чтобы создать иллюзию полета , тут , что-то...

Вывести на экран монитора пятиугольник таким образом, чтобы он изменял свой цвет с белого (White) на желтый (Yellow) и наоборот, после чего процесс см - Turbo Pascal
Помогите пожалуйста написать такую программу: Вывести на экран монитора пятиугольник таким образом, чтобы он изменял свой цвет с белого...

Вывести на экран монитора пятиугольник таким образом, чтобы он менял свой ​​цвет с белого (White) на желтый - Turbo Pascal
Вывести на экран монитора пятиугольник таким образом, чтобы он менял свой ​​цвет с белого (White) на желтый (Yellow) и наоборот, после чего...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru