Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Александрик
4 / 4 / 1
Регистрация: 15.03.2012
Сообщений: 77
#1

Увеличение и уменьшение "Квадрата" афтоматически - C++

21.03.2014, 12:23. Просмотров 291. Ответов 0
Метки нет (Все метки)

Выкладываю готовый код (возможно кому то пригодится)

Задание :

Решить предыдущую задачу, только размеры должны изменятся афтоамтически через 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
#include <Windows.h>
#include <tchar.h>
#include <xstring>
#include <iostream>
typedef std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR> > String;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
TCHAR WinName[] = _T("MainFrame") ;
int APIENTRY _tWinMain(HINSTANCE This, // Дескриптор текущего приложения
    HINSTANCE Prev,                   // В современных системах всегда 0
    LPTSTR cmd,                       // Командная строка
    int mode)                         // Режим отображения окна
{
    HWND hWnd;              // Дескриптор главного окна программы
    MSG msg;                // Структура для хранения сообщения
    WNDCLASS wc;  // Класс окна
// Определение класса окна
    wc.hInstance = This;
    wc.lpszClassName = WinName;                // Имя класса окна
    wc.lpfnWndProc = WndProc;                  // Функция окна
    wc.style = CS_HREDRAW | CS_VREDRAW;       // Стиль окна
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);    // Стандартная иконка
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Стандартный курсор
    wc.lpszMenuName = NULL;       // Нет меню
    wc.cbClsExtra = 0;            // Нет дополнительных данных класса
    wc.cbWndExtra = 0;            // Нет дополнительных данных окна
    // Заполнение окна белым цветом
    wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
    if (!RegisterClass(&wc)) return 0;   // Регистрация класса окна
// Создание окна
    hWnd = CreateWindow(WinName, // Имя класса окна
    _T("Программа эхо-печати"),  // Заголовок окна
    WS_OVERLAPPEDWINDOW,         // Стиль окна
    300, // x
    400, // y   Размеры окна
    600, // width
    500, // Height
    HWND_DESKTOP, // Дескриптор родительского окна
    NULL,         // Нет меню
    This,         // Дескриптор приложения
    NULL);        // Дополнительной информации нет
    ShowWindow(hWnd, mode); // Показать окно
// Цикл обработки сообщений
    while(GetMessage(&msg, NULL, 0, 0))
    {
    TranslateMessage(&msg); // Функция трансляции кодов нажатой клавиши
    DispatchMessage(&msg);  // Посылает сообщение функции WndProc()
    }
    return 0;
}
int x, y, wx = 400, wy = 200;
LRESULT CALLBACK WndProc(HWND hWnd,UINT message, WPARAM wParam,LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    static int t;
    TCHAR s[10], str[20] = _T("Кол-во нажатий: ");
     RECT r;
    ::GetClientRect(hWnd, &r); //Клиентска область hWnd - указатель на окно . GetWindowRect - само окно где будет прямоугольник
        
    x = ((r.right - r.left)/2) - (wx / 2);  //Расположение нашего квадрата отнасительно окна
    y = ((r.bottom - r.top)/2) - (wy / 2);  //Расположение нашего квадрата отнасительно окна
      int mx, my;
         mx = LOWORD(lParam); // Горизонтальное положение курсора
         my = HIWORD(lParam); // вертикальное  эти 2 параметра нужны для размера что бы только нажимая на квадрат он увеличивался\уменьшался
    switch(message)
    {
case WM_LBUTTONDOWN:
    KillTimer(hWnd, 2);// Удаляем наш таймер 
        SetTimer(hWnd, 1, 1000,NULL);//Создаем 1й таймер с параметрами
        t++;//шаг +1
        break;
case WM_LBUTTONUP: // case оператор выбора
    KillTimer(hWnd, 1);// Удаляем наш таймер 
    SetTimer(hWnd, 2, 1000,NULL);//Создаем 2й таймер с параметрами
        t++;//шаг +1
        break;
case WM_RBUTTONDOWN: // case оператор выбора
            KillTimer(hWnd, 1);// Удаляем наш таймер 
            KillTimer(hWnd, 2);// Удаляем наш таймер 
            break;
case WM_TIMER:
    {   
      switch(wParam)
        {
          case 1:  // выполнение для первого таймера
            {
             x -= 10;
             y -= 10;
             wx += 10;
             wy += 10;
            }
::InvalidateRect(hWnd, NULL, TRUE );
            break;
            case 2:  // выполнение для второго таймера  
            {
            x += 10;
            y += 10;
            wx -= 10;
            wy -= 10;
            }
::InvalidateRect(hWnd, NULL, TRUE );
break;}
}
    case WM_PAINT :
        hdc = BeginPaint(hWnd, &ps);
        //============= (Окраска нашего квадрата) ===========
        HBRUSH br, obr;
            br = ::CreateSolidBrush(RGB(0,2,255)); 
            obr = (HBRUSH):: SelectObject(hdc, br);
        //========================
        _tcscat(str+9, _itot(t, s, 10));
        TextOut(hdc, 0, 0, str, _tcsclen(str));
        //============== (Рисуем наш квадрат) ============
        ::Rectangle(hdc, x, y, x + wx, y + wy);
        // ===============================================
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY :
        KillTimer(hWnd, 1);// Удаляем наш таймер 
        KillTimer(hWnd, 2);// Удаляем наш таймер 
        PostQuitMessage(0);
        break;
    default: return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
 
// ОПИСАНИЕ ФУНКЦИЙ:
//-------------************-------------------------
//SetTimer(hWnd, 1, 200,NULL);
//SetTimer - создание таймера
//hWnd - Имя окна на которое ссылается наш таймер (где он будет выполнятся)
//1 - Имя таймера по которому мы к нему обращаемся
//200 - Время через которое таймер срабатывает
//NULL - Параметр функций,если указанно NULL тогда таймер обрабатывает все что находится в блоке case WM_TIMER: так сказать по умолчанию.
//t++ - Шаг +1 
//KillTimer - удаление таймера

Результат :
0
Миниатюры
Увеличение и уменьшение "Квадрата" афтоматически  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2014, 12:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Увеличение и уменьшение "Квадрата" афтоматически (C++):

Реализовать класс "Квадрат" с данными-членами "центр квадрата" и "сторона квадрата" - C++
Объявить класс по приведенному ниже заданию в соответствии с номером варианта и определить для него конструктор по умолчанию,...

Увеличение и уменьшение квадрата С++ - C++
Доброе время суток! Кто может подсказать как можно реализовать увеличение и уменьшение квадрата динамически? То есть квадрат то...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Уменьшение значений элементов матрицы(перегрузка операции "--") - C++
Задача Перегрузите операцию &quot;--&quot; позволяющую уменьшать переменную типа матрица на 1. В результате каждылемент матрицы должен...

Динамическое программирование, задача "Уменьшение числа" - C++
Имеется натуральное число N (1 &lt;= N &lt;= 106). За один ход с ним можно произвести следующие действия: Вычесть единицу Разделить на два ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2014, 12:23
Привет! Вот еще темы с ответами:

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...


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

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

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