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

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

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

Author24 — интернет-сервис помощи студентам
Прошу помощи с редактированием кода, чтобы получить результат, как на гифке.
В исходнике по нажатии на 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2020, 13:58
Ответы с готовыми решениями:

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

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

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

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

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

Кликните здесь для просмотра всего текста
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);
}


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


Пока что с ограничениями я не разбирался, но круг следует за курсором. Но останавливается, когда курсор находит на сам круг. Я так понимаю, это потому что круг является другим окном, и с него координаты не берутся, но я совсем не знаю как это исправить!
А еще, хоть на гифке не видно, но при быстрых движениях курсором в сторону, часть круга "съедается" и дорисовывается только в конечной точке. Я не могу это запечатлеть, потому что даже скриншоты не дают этот момент поймать, но круг действительно обрезается. Что с этим можно сделать?
0
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
23.08.2020, 19:35 3
Лучший ответ Сообщение было отмечено 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  [ТС] 4
Прошу прощения, но у меня не получается запустить ваш код, если я его, конечно, правильно собрал. Компилятор ругается:

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
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
23.08.2020, 21:32 5
Цитата Сообщение от 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  [ТС] 6
Добавил перед икнлюдами #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
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
23.08.2020, 23:17 7
Цитата Сообщение от DioxiT Посмотреть сообщение
В чем может быть проблема?
Попробуй перед первой фигурной скобкой добавить идентификатор типа(т.е. rectWin = RECT{...};)
Если не поможет, вручную присвой поля(т.е. rectWin.left = centerX - halfSize; и т.д.)
1
23.08.2020, 23:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2020, 23:17
Помогаю со студенческими работами здесь

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

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

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

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

Библиотека по Win32 API
Посоветуйте справочник с довольно большим количеством функций (Желательно русский)

ComboBox Win32 API
Здравствуйте, для чего нужен ComboBox? В диалоговом окне Я добавил 2 ComboBox и в них запихал радио...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru