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

Отрисовка круга, следующего за курсором в API win32

23.08.2020, 13:58. Показов 2555. Ответов 6

Студворк — интернет-сервис помощи студентам
Прошу помощи с редактированием кода, чтобы получить результат, как на гифке.
В исходнике по нажатии на Enter красный эллипс начинает двигаться по окружности, и останавливается по нажатии на Space.

Исходный код (Писался в Watcom IDE, современная версия VS у меня ругается на несколько операций с переменными и не хочет компилироваться):
Кликните здесь для просмотра всего текста
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
#include <windows.h>
#include <stdio.h>
#include "time.h"
#include <math.h>
#include "windowsx.h"
 
//  Defines:
#define ID_MYSTATIC  1
 
#define ID_FIRSTCHILD   100
#define ID_TIMER  101
 
 
//Globals:
HINSTANCE hInst;
//static HBRUSH brush[2];
static int st = 0;
//static int x, y = 0;
static POINT xy;
static bool moving;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
LRESULT CALLBACK ChildProc(HWND, UINT, WPARAM,LPARAM);
 
HINSTANCE hinst;
HWND child;
int APIENTRY WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
{
        HWND hwnd;
        MSG msg;
        WNDCLASS w;
        hinst=hInstance;
        memset(&w,0,sizeof(WNDCLASS));
        w.style = CS_HREDRAW | CS_VREDRAW;
        w.lpfnWndProc = WndProc;
        w.hInstance = hInstance;
        w.hbrBackground = GetStockBrush(WHITE_BRUSH);
        w.lpszClassName = "Move circle";
        w.hCursor=LoadCursor(NULL,IDC_ARROW);
        RegisterClass(&w);
        hwnd = CreateWindow("Move circle","Move circle", WS_OVERLAPPEDWINDOW,
                10,10,500,500,NULL,NULL,hInstance,NULL);
        ShowWindow(hwnd,nCmdShow);
        UpdateWindow(hwnd);
        while(GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)  
{
    
    static HWND staticx;
        switch(Message)
        {
        case WM_CREATE:
        {
                xy.x = 230 + 150;
                xy.y = 220;
                staticx = CreateWindow("static","push Enter for move and Space for stop",WS_CHILD | WS_VISIBLE | SS_CENTER,
                150,8,200,30,hwnd,(HMENU)ID_MYSTATIC,NULL,NULL);
                WNDCLASS w;
                memset(&w,0,sizeof(WNDCLASS));
                w.lpfnWndProc = ChildProc;
                w.hInstance = hinst;
                w.hbrBackground = GetStockBrush(WHITE_BRUSH);
                w.lpszClassName = "ChildWClass";
                w.hCursor=LoadCursor(NULL,IDC_CROSS);
                RegisterClass(&w);
 
                child=CreateWindowEx(0,"ChildWClass",(LPCTSTR) NULL,
                                     WS_CHILD | WS_VISIBLE ,xy.x,xy.y,
                                     50,50,hwnd,(HMENU) (int) (ID_FIRSTCHILD),hinst,NULL);
                ShowWindow(child,SW_NORMAL);
                UpdateWindow(child);
                SetTimer(hwnd,ID_TIMER, 30, NULL);
                return 0;
        }
 
         case WM_KEYDOWN:
           switch (wparam)
           {
               case VK_SPACE:
                moving = false;
                break;
                
             case VK_RETURN:
               moving = true;
                break;  
           }
           case WM_TIMER:
           {
            if(moving)
              {
                    st++;
                    xy.x = 230 + 150*cos((3.141593*st)/360);
                    xy.y = 220 + 150*sin((3.141593*st)/360);
                    UpdateWindow(child); 
                    SetWindowPos(child,HWND_BOTTOM, xy.x,xy.y,50,50,SWP_NOSIZE);
              }
            else
              {
               SetWindowPos(child,HWND_TOP, xy.x,xy.y,50,50,SWP_NOSIZE | SWP_NOMOVE);
               UpdateWindow(child);
              }
            
            }
        }
        if (Message == WM_DESTROY )
        {
                PostQuitMessage(0);
                return 0;
        }
        return DefWindowProc(hwnd,Message,wparam,lparam);
    }
 
 
LRESULT CALLBACK ChildProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
    switch(Message)
    {
        case WM_PAINT:
        {
            PAINTSTRUCT     ps;
            HDC hDC;
            hDC=BeginPaint(hwnd, &ps );
            
 
            HBRUSH ebrush = CreateSolidBrush(RGB(255, 0, 0));
            SelectObject(hDC,ebrush);
            Ellipse(hDC, 0, 0, 50, 50);
            EndPaint(hwnd, &ps );
        }
 
    }
        if (Message == WM_DESTROY )
        {
                return 0;
        }
        return DefWindowProc(hwnd,Message,wparam,lparam);
}

Нужно, чтобы при запуске окна, эллипс перемещался за курсором, но не выходил за определенные кругом границы.
Я был бы очень благодарен за предоставление рабочего кода, или кода похожей программы, с которой я бы мог разобраться и надергать оттуда функции.

P.S. Нужно для универа, я благополучно пропустил весь курс API и сейчас пытаюсь исправиться, но времени осталось мало) Помогите х)
Миниатюры
Отрисовка круга, следующего за курсором в API win32  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.08.2020, 13:58
Ответы с готовыми решениями:

Почему Microsoft больше не публикует книги по Win32 API? В частности, разработка графического интерфейса с Win32
Кто-нибудь знает, почему Microsoft перестала публиковать книги по программированию Win32 GUI? Я использую электронную книгу...

Отрисовка линии за курсором мышки
Друзья, рад вас приветствовать. В Python я новичок. Изучаю PyQt. Появилась следующая задача: имеется окно, в окне пользователь водит...

Отрисовка круга в консоли по данным
Написал код для отрисовки круга в консоли,через известные x,y,радиус.Но выдает кривоватый круг и нужно через формулу окружности,C# ...

6
0 / 0 / 0
Регистрация: 11.12.2018
Сообщений: 32
23.08.2020, 15:14  [ТС]
У меня есть некоторый прогресс, может вдруг кто-то поможет хотя бы с этим.

Кликните здесь для просмотра всего текста
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
#include <windows.h>
#include <stdio.h>
#include "time.h"
#include <math.h>
#include "windowsx.h"
 
//  Defines:
#define ID_MYSTATIC  1
 
#define ID_FIRSTCHILD   100
#define ID_TIMER  101
 
 
//Globals:
HINSTANCE hInst;
//static HBRUSH brush[2];
static int st = 0;
//static int x, y = 0;
static POINT xy;
static bool moving;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
LRESULT CALLBACK ChildProc(HWND, UINT, WPARAM,LPARAM);
 
HINSTANCE hinst;
HWND child;
int APIENTRY WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
{
        HWND hwnd;
        MSG msg;
        WNDCLASS w;
        hinst=hInstance;
        memset(&w,0,sizeof(WNDCLASS));
        w.style = CS_HREDRAW | CS_VREDRAW;
        w.lpfnWndProc = WndProc;
        w.hInstance = hInstance;
        w.hbrBackground = GetStockBrush(WHITE_BRUSH);
        w.lpszClassName = "Move circle";
        w.hCursor=LoadCursor(NULL,IDC_ARROW);
        RegisterClass(&w);
        hwnd = CreateWindow("Move circle","Move circle", WS_OVERLAPPEDWINDOW,
                10,10,500,500,NULL,NULL,hInstance,NULL);
        ShowWindow(hwnd,nCmdShow);
        UpdateWindow(hwnd);
        while(GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)  
{
    
    static HWND staticx;
        switch(Message)
        {
             case WM_CREATE:
        {
                xy.x = 230 + 150;
                xy.y = 220;
                WNDCLASS w;
                memset(&w,0,sizeof(WNDCLASS));
                w.lpfnWndProc = ChildProc;
                w.hInstance = hinst;
                w.hbrBackground = GetStockBrush(WHITE_BRUSH);
                w.lpszClassName = "ChildWClass";
                RegisterClass(&w);
 
                child=CreateWindowEx(0,"ChildWClass",(LPCTSTR) NULL,
                                     WS_CHILD | WS_VISIBLE ,xy.x,xy.y,
                                     50,50,hwnd,(HMENU) (int) (ID_FIRSTCHILD),hinst,NULL);
                ShowWindow(child,SW_NORMAL);
                UpdateWindow(child);
                SetTimer(hwnd,ID_TIMER, 30, NULL);
                return 0;
        }
 
           case WM_MOUSEMOVE:
           {
               xy.x = LOWORD(lparam);
               xy.y = HIWORD(lparam);
               
           }
 
           case WM_TIMER:
           {
            UpdateWindow(child);
            SetWindowPos(child,HWND_BOTTOM, xy.x,xy.y,50,50,SWP_NOSIZE);
           }
        }
        if (Message == WM_DESTROY )
        {
                PostQuitMessage(0);
                return 0;
        }
        return DefWindowProc(hwnd,Message,wparam,lparam);
    }
 
 
LRESULT CALLBACK ChildProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
    switch(Message)
    {
        case WM_PAINT:
        {
            PAINTSTRUCT     ps;
            HDC hDC;
            hDC=BeginPaint(hwnd, &ps );
            
 
            HBRUSH ebrush = CreateSolidBrush(RGB(255, 0, 0));
            SelectObject(hDC,ebrush);
            Ellipse(hDC, 0, 0, 50, 50);
            EndPaint(hwnd, &ps );
        }
 
    }
        if (Message == WM_DESTROY )
        {
                return 0;
        }
        return DefWindowProc(hwnd,Message,wparam,lparam);
}


Гифка с результатом:

Пока что с ограничениями я не разбирался, но круг следует за курсором. Но останавливается, когда курсор находит на сам круг. Я так понимаю, это потому что круг является другим окном, и с него координаты не берутся, но я совсем не знаю как это исправить!
А еще, хоть на гифке не видно, но при быстрых движениях курсором в сторону, часть круга "съедается" и дорисовывается только в конечной точке. Я не могу это запечатлеть, потому что даже скриншоты не дают этот момент поймать, но круг действительно обрезается. Что с этим можно сделать?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.08.2020, 19:35
Лучший ответ Сообщение было отмечено DioxiT как решение

Решение

Цитата Сообщение от DioxiT Посмотреть сообщение
Что с этим можно сделать?
Попробуйте так:
Кликните здесь для просмотра всего текста
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
    // глобальные объекты
 
    HDC memDC;
    HBITMAP memBM;
 
    const int innerRadius = 20;
    const int outerRadius = 100;
    const int halfSize = outerRadius + innerRadius;
    const RECT rectBM = { 0, 0, 2 * halfSize, 2 * halfSize };
 
    int posX = halfSize;
    int posY = halfSize;
    int centerX, centerY;
    RECT rectWin;
 
 
    // обработка событий
 
    //...
 
    case WM_CREATE:
    {
        RECT rect;
        GetClientRect(hWnd, &rect);
        centerX = (rect.right - rect.left) / 2;
        centerY = (rect.bottom - rect.top) / 2;
        rectWin = { centerX - halfSize, centerY - halfSize, centerX + halfSize, centerY + halfSize };
        HDC dc = GetDC(hWnd);
        memDC = CreateCompatibleDC(dc);
        memBM = CreateCompatibleBitmap(dc, rectBM.right, rectBM.bottom);
        SelectObject(memDC, memBM);
        SelectObject(memDC, GetStockObject(DC_BRUSH));
        SelectObject(memDC, GetStockObject(DC_PEN));
        ReleaseDC(hWnd, dc);
    }
    break;
    case WM_MOUSEMOVE:
    {
        int deltaX = LOWORD(lParam) - centerX;
        int deltaY = HIWORD(lParam) - centerY;
        // include <cmath> для std::sqrt
        const float length = std::sqrt(float(deltaX) * deltaX + float(deltaY) * deltaY);
        const float factor = length / outerRadius;
        if (1 < factor)
        {
            deltaX = int(deltaX / factor);
            deltaY = int(deltaY / factor);
        }
        posX = deltaX + halfSize;
        posY = deltaY + halfSize;
        InvalidateRect(hWnd, &rectWin, FALSE);
    }
    break;
    case WM_PAINT:
    {
        SetDCPenColor(memDC, COLORREF(0xFFFFFF));
        SetDCBrushColor(memDC, COLORREF(0xFFFFFF));
        Rectangle(
            memDC,
            rectBM.left, rectBM.top,
            rectBM.right, rectBM.bottom
        );
        SetDCPenColor(memDC, COLORREF(0x00));
        Ellipse(
            memDC,
            rectBM.left + innerRadius, rectBM.top + innerRadius,
            rectBM.right - innerRadius, rectBM.bottom - innerRadius
        );
        SetDCBrushColor(memDC, COLORREF(0xFF));
        Ellipse(
            memDC,
            posX - innerRadius, posY - innerRadius,
            posX + innerRadius, posY + innerRadius
        );
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);
        BitBlt(
            hdc,
            rectWin.left, rectWin.top, rectBM.right, rectBM.bottom,
            memDC,
            rectBM.left, rectBM.top, SRCCOPY
        );
        EndPaint(hWnd, &ps);
    }
    break;
    case WM_DESTROY:
    {
        DeleteObject(memBM);
        DeleteDC(memDC);
        PostQuitMessage(0);
    }
    break;
 
    //...
1
0 / 0 / 0
Регистрация: 11.12.2018
Сообщений: 32
23.08.2020, 21:02  [ТС]
Прошу прощения, но у меня не получается запустить ваш код, если я его, конечно, правильно собрал. Компилятор ругается:

circle.cpp(72): Error! E121: col(23) syntax error
circle.cpp(77): Error! E029: col(48) symbol 'DC_BRUSH' has not been declared
circle.cpp(78): Error! E029: col(48) symbol 'DC_PEN' has not been declared
circle.cpp(101): Error! E029: col(26) symbol 'SetDCPenColor' has not been declared
circle.cpp(102): Error! E029: col(13) symbol 'SetDCBrushColor' has not been declared

Я должен был как-то заранее определить DC_BRUS и DC_PEN?
Очень прошу помочь!

Кликните здесь для просмотра всего текста
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
#include <windows.h>
#include <stdio.h>
#include "time.h"
#include <math.h>
#include "windowsx.h"
 
//  Defines:
#define ID_MYSTATIC  1
 
#define ID_FIRSTCHILD   100
#define ID_TIMER  101
 
 
//Globals:
HINSTANCE hInst;
HDC memDC;
HBITMAP memBM;
const int innerRadius = 20;
const int outerRadius = 100;
const int halfSize = outerRadius + innerRadius;
const RECT rectBM = { 0, 0, 2 * halfSize, 2 * halfSize };
 
int posX = halfSize;
int posY = halfSize;
int centerX, centerY;
RECT rectWin;
static int st = 0;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
 
HINSTANCE hinst;
int APIENTRY WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
{
        HWND hWnd;
        MSG msg;
        WNDCLASS w;
        hinst=hInstance;
        memset(&w,0,sizeof(WNDCLASS));
        w.style = CS_HREDRAW | CS_VREDRAW;
        w.lpfnWndProc = WndProc;
        w.hInstance = hInstance;
        w.hbrBackground = GetStockBrush(WHITE_BRUSH);
        w.lpszClassName = "Move circle";
        w.hCursor=LoadCursor(NULL,IDC_ARROW);
        RegisterClass(&w);
        hWnd = CreateWindow("Move circle","Move circle", WS_OVERLAPPEDWINDOW,
                10,10,500,500,NULL,NULL,hInstance,NULL);
        ShowWindow(hWnd,nCmdShow);
        UpdateWindow(hWnd);
        while(GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam,LPARAM lParam)  
{
    
    static HWND staticx;
    switch(Message)
    {
        case WM_CREATE:
        {
            RECT rect;
            GetClientRect(hWnd, &rect);
            centerX = (rect.right - rect.left) / 2;
            centerY = (rect.bottom - rect.top) / 2;
            rectWin = { centerX - halfSize, centerY - halfSize, centerX + halfSize, centerY + halfSize };
            HDC dc = GetDC(hWnd);
            memDC = CreateCompatibleDC(dc);
            memBM = CreateCompatibleBitmap(dc, rectBM.right, rectBM.bottom);
            SelectObject(memDC, memBM);
            SelectObject(memDC, GetStockObject(DC_BRUSH));
            SelectObject(memDC, GetStockObject(DC_PEN));
            ReleaseDC(hWnd, dc);
        }
        break;
        case WM_MOUSEMOVE:
        {
            int deltaX = LOWORD(lParam) - centerX;
            int deltaY = HIWORD(lParam) - centerY;
            // include <cmath> для std::sqrt
            const float length = std::sqrt(float(deltaX) * deltaX + float(deltaY) * deltaY);
            const float factor = length / outerRadius;
            if (1 < factor)
            {
                deltaX = int(deltaX / factor);
                deltaY = int(deltaY / factor);
            }
            posX = deltaX + halfSize;
            posY = deltaY + halfSize;
            InvalidateRect(hWnd, &rectWin, FALSE);
        }
        break;
        case WM_PAINT:
        {
            SetDCPenColor(memDC, COLORREF(0xFFFFFF));
            SetDCBrushColor(memDC, COLORREF(0xFFFFFF));
            Rectangle(
                memDC,
                rectBM.left, rectBM.top,
                rectBM.right, rectBM.bottom
                      );
            SetDCPenColor(memDC, COLORREF(0x00));
            Ellipse(
                memDC,
                rectBM.left + innerRadius, rectBM.top + innerRadius,
                rectBM.right - innerRadius, rectBM.bottom - innerRadius
                    );
            SetDCBrushColor(memDC, COLORREF(0xFF));
            Ellipse(
                memDC,
                posX - innerRadius, posY - innerRadius,
                posX + innerRadius, posY + innerRadius
                    );
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            BitBlt(
                hdc,
                rectWin.left, rectWin.top, rectBM.right, rectBM.bottom,
                memDC,
                rectBM.left, rectBM.top, SRCCOPY
                    );
            EndPaint(hWnd, &ps);
        }
        break;
        case WM_DESTROY:
        {
            DeleteObject(memBM);
            DeleteDC(memDC);
            PostQuitMessage(0);
        }
        break;
        }
        return DefWindowProc(hWnd,Message,wParam,lParam);
    }
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.08.2020, 21:32
Цитата Сообщение от DioxiT Посмотреть сообщение
Я должен был как-то заранее определить DC_BRUS и DC_PEN?
Нет, они должны быть определены в Wingdi.h, правда должна быть Windows 2000 и старше.

Если нету, создайте сами две кисти Brush(белую и красную) и две ручки Pen(чёрную и белую) и выбирайте их вместо SetDCPrushColor и SetDcPenColor
0
0 / 0 / 0
Регистрация: 11.12.2018
Сообщений: 32
23.08.2020, 23:15  [ТС]
Добавил перед икнлюдами #define _WIN32_WINNT 0x500 и осталась только одна ошибка. Синтаксическая в 72 строке:
rectWin = { centerX - halfSize, centerY - halfSize, centerX + halfSize, centerY + halfSize };

В чем может быть проблема? Для структуры синтаксис правильный, кажется, тем более в глобальных выше rectBM инициализировался так же. Я думал с типами данных какие-то проблемы, но разве не должна быть для этого отдельная ошибка?

Добавлено через 32 минуты
В чем ошибка я так и не понял, но если записать так, то работает:
C++
1
2
3
4
rectWin.left = centerX - halfSize;
rectWin.top = centerY - halfSize;
rectWin.right = centerX + halfSize;
rectWin.bottom = centerY + halfSize;
Спасибо огромное за рабочий код и дальнейшие подсказки!
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.08.2020, 23:17
Цитата Сообщение от DioxiT Посмотреть сообщение
В чем может быть проблема?
Попробуй перед первой фигурной скобкой добавить идентификатор типа(т.е. rectWin = RECT{...};)
Если не поможет, вручную присвой поля(т.е. rectWin.left = centerX - halfSize; и т.д.)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.08.2020, 23:17
Помогаю со студенческими работами здесь

Перемещение круга в установленную курсором мыши точку
Красный круг (радиус = 75) медленно перемещается в точку, указанную щелчком левой кнопки мыши. При нажатии правой кнопки происходит...

Нарисовать 5 кругов со смещением центра каждого следующего круга
Нарисовать 5 кругов таким образом, чтобы центр каждого следующего круга был смещен от центра предыдущего круга на заданную величину.

Qt + Win32 API
Использую Qt как среду разработки по Windows. Опыта, к сожалению, пока нет никакого. Собственно вопрос: какие библиотеки нужны и как их...

С++ Win32 API
Подскажите книгу с самым доступным объяснением по данной теме. Что-то в роде &quot;С++ за 21 день&quot; только по Win32. Для чайников так...

Win32 API
Хочу научиться пользоваться функциями API. Подскажите с чего начать.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами 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 из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru