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

Изменение размера прямоугольника по таймеру

06.06.2017, 11:59. Показов 1070. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать так что бы строился прямоугольник в центре окна, а его размер автоматически изменялся через 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
PAINTSTRUCT ps;
        HDC hdc;
        int x, y;
        static int sx, sy;
        static int t;
        TCHAR s[10], str[20] = _T("Секунды: ");
        switch (message)
        {
        case WM_CREATE:
                SetTimer(hWnd, 1, 1000, NULL);
                break;
 
        case WM_TIMER :
                t++;
                InvalidateRect(hWnd, NULL, TRUE);
                break;
 
        case WM_SIZE:
                sx = LOWORD(lParam);
                sy = HIWORD(lParam);
                break;
 
        case WM_PAINT:
 
                hdc = BeginPaint(hWnd, &ps);
                _tcscat(str+9, _itot(t, s, 10));
                TextOut(hdc, 0, 0, str, _tcsclen(str));
 
                Rectangle(hdc, sx/(4+t), sy/(4+t), sx*3/4, sy*3/4);
                EndPaint(hWnd, &ps);
                break;
 
        case WM_RBUTTONDOWN:
                PostQuitMessage(0);
                break;
 
        case WM_LBUTTONDOWN:
 
                break;
 
        case WM_DESTROY: 
                KillTimer(hWnd, 1);
                PostQuitMessage(0);
        break;
 
        default: 
                return DefWindowProc(hWnd, message, wParam, lParam);
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2017, 11:59
Ответы с готовыми решениями:

Изменение размера прямоугольника при фиксированной координате верхнего левого угла
Здравствуйте, помогите пожалуйста с курсовой «Резиновый прямоугольник». Изменение размера прямоугольника при фиксированной координате...

Изменение размера окна -> изменение размера картинки
Есть картинка на Homepage, как сделать так, что бы при изменении окна браузера размер картинки автоматически изменялся соответственно...

Qml изменение размера Canvas при изменении размера окна
Может есть какой нибудь способ, чтобы при изменении размера окна (в моем случае window) изменялся размер рисунка Canvas (увеличивался или...

3
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
06.06.2017, 13:29
C++
1
static int t = 0;
а это лучше так сделать:
C++
1
2
3
4
5
TCHAR buf[30], str[] = _T("Секунды: %d");
    ...
    _tsprintf_s(buf, str, t);
    TextOut(hdc, 0, 0, buf, _tcsclen(buf));
    ...
0
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 62
06.06.2017, 17:20  [ТС]
Спасибо, но это не решает мою основную проблему)
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
06.06.2017, 17:51
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
#include <windows.h>
#include <windowsx.h>
 
#define APP_NAME "Graphics Test"
 
const int window_width = 600;
const int window_height = 600;
 
HBRUSH hWindowBrush;
 
int x = 0, y = 0, x_size = 0, y_size = 0;
int state = 0;
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
         case WM_CREATE:
         {
              hWindowBrush = CreateSolidBrush (RGB (150, 150, 150));
              SetTimer (hwnd, 1, 1000, NULL);
              x = (window_width >> 1) - 100;
              y = (window_height >> 1) - 100;
              x_size = (window_width >> 1) + 100;
              y_size = (window_height >> 1) + 100;
         }
         break;
         
         case WM_LBUTTONDOWN:
         {
              if (state == 0)
                   state = 1;
              else if (state == 1)
                   state = 0;
         }
         break;
         
         case WM_TIMER:
         {
              if (state == 0)
              {
                   x -= 30;
                   y -= 30;
                   x_size += 30;
                   y_size += 30;
              }
              else if (state == 1)
              {
                   x += 30;
                   y += 30;
                   x_size -= 30;
                   y_size -= 30;
              }
              InvalidateRect (hwnd, NULL, FALSE);
         }
         break;
         
         case WM_PAINT:
         {
              PAINTSTRUCT ps;
              HDC hdc = BeginPaint (hwnd, &ps);
              
              HDC hMemDC = CreateCompatibleDC (hdc);
              HBITMAP hScreen = CreateCompatibleBitmap (hdc, window_width, window_height);
              HBITMAP oldBmp = (HBITMAP) SelectObject (hMemDC, hScreen);
              PatBlt (hMemDC, 0, 0, window_width, window_height, WHITENESS);
              
              FillRect (hMemDC, &ps.rcPaint, hWindowBrush);
              Rectangle (hMemDC, x, y, x_size, y_size);
              
              BitBlt (hdc, 0, 0, window_width, window_height, hMemDC, 0, 0, SRCCOPY);
              
              SelectObject (hMemDC, oldBmp);
              DeleteObject (hScreen);
              DeleteDC (hMemDC);
              
              EndPaint (hwnd, &ps);
         }
         break;
         
         case WM_DESTROY:
         {
              DeleteBrush (hWindowBrush);
              KillTimer (hwnd, 1);
              PostQuitMessage (0);
         }
         break;
    }
    return DefWindowProc (hwnd, msg, wParam, lParam);
}
 
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    char Class [] = APP_NAME "_Class";
    
    WNDCLASS wc      = {0};
    ZeroMemory (&wc, sizeof (wc) );
    
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WindowProcedure;
    wc.hInstance     = hInst;
    wc.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground = 0;
    wc.lpszClassName = Class;
    wc.lpszMenuName  = NULL;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    
    if (!RegisterClass (&wc))
    {
         MessageBox (NULL, "Window Registration Failed!", "Error!", MB_OK | MB_ICONERROR);
         return 0;
    }
    
    HWND hwnd = CreateWindow (Class, APP_NAME, WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX & ~WS_THICKFRAME,
                              (GetSystemMetrics (SM_CXSCREEN) >> 1) - (window_width >> 1),
                              (GetSystemMetrics (SM_CYSCREEN) >> 1) - (window_height >> 1),
                              window_width, window_height, NULL, NULL, hInst, NULL);
    if (!hwnd)
    {
         MessageBox (NULL, "Window Creation Failed!", "Error!", MB_OK | MB_ICONERROR);
         return 0;
    }
    
    ShowWindow (hwnd, SW_SHOW);
    UpdateWindow (hwnd);
    
    MSG msg;
    while (GetMessage (&msg, NULL, 0, 0))
    {
         DispatchMessage (&msg);
         TranslateMessage (&msg);
    }
    
    UnregisterClass (Class, hInst);
    return (int) msg.wParam;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2017, 17:51
Помогаю со студенческими работами здесь

Изменение размера обьектов при изменении размера графического окна
Можно ли в pascalABC.net сделать следующее: чтобы приизменении размера графического окна изменялись и размеры обьектов.Зарание спасибо:-|

Изменение размера UserControl при изменении размера элемента на нем
Здравствуйте. У меня на UserControl находится TextBox. Выполняю построение. В конструкторе переношу мой UserControl на форму. Меняю в...

Изменение размера верхней навигации при изменении размера
Нужно сделать так чтобы при прокрутке страницы вниз меню уменьшалось а при прокрутке к верху меню снова становилось своих размеров внизу...

Изменение размера картинки при увеличении размера экрана
Добрый день. Как можно сделать следующее: Имеется картинка большого размера, при заходе с малым разрешением экрана (телефон) картинка...

Изменение размера итема после изменения размера списка
Имеется вот такой ListView &lt;ListView x:Name=&quot;lstRooms&quot; Margin=&quot;10&quot;&gt; &lt;Grid&gt; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 17.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 14.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru