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

От размера окна координально меняется отрисовка

17.10.2022, 17:54. Показов 1248. Ответов 4

Студворк — интернет-сервис помощи студентам
От размера окна координально меняется отрисовка. Не понимаю с чем это связано. Происходит невнятное месиво при обычном размере окна. - скриншот 33
При сужении окна, на каком-либо размере ширины происходит так, что отрисовывается нормальная картинка, которая и должна быть. - скриншот 32
Ожидаемый эффект от смены размеров окна: картинка расширяется - сжимается; а получается так, либо я криворукий, либо это не со мной связано, но вопрос один - можно ли это пофиксить?
Кликните здесь для просмотра всего текста
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
#include <Windows.h>
#include <tchar.h>
#include <cmath>
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
TCHAR WinName[] = _T("MainFrame");
 
int APIENTRY WinMain(HINSTANCE This, HINSTANCE Prev, LPSTR 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("Лабораторная работа 2"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        HWND_DESKTOP,
        NULL,
        This,
        NULL);
    SetWindowPos(hWnd, hWnd, 100, 100, 80, 400, SWP_NOZORDER | SWP_NOMOVE);
    ShowWindow(hWnd, mode);
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    PAINTSTRUCT ps;
    HDC hdc;
    HPEN blackpen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
    HPEN bluepen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
    HPEN redpen = CreatePen(PS_SOLID, 2, RGB(255, 0, 2));
    HBRUSH brush = CreateSolidBrush(RGB(255, 0, 0));
    static int sx, sy;
    float x, y, z, x_min, x_max, y_min, y_max, Kx, Ky;
    int a, b, n, x_scr, y_scr, z_scr;
    switch (message) {
    case WM_CREATE:
        break;
    case WM_SIZE:
        sx = LOWORD(lParam);
        sy = HIWORD(lParam);
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        SelectObject(hdc, blackpen);
        MoveToEx(hdc, 0, sy/2, NULL);
        LineTo(hdc, sx, sy/2);
        MoveToEx(hdc, sx/2, 0, NULL);
        LineTo(hdc, sx/2, sy);
        SelectObject(hdc, bluepen);
        x = -sx / 2, y = pow(x, 4) - (3 * pow(x, 2)) + 8;
        MoveToEx(hdc, x, y, NULL);
        for (; x < sx; x += 1) {
            y = pow(x, 4) - (3 * pow(x, 2)) + 8;
            //y = pow(x, 4);
            LineTo(hdc, x+(sx/2), -y+(sy/2));
        }
 
        x_min = -100;
        x_max = 100;
        y_min = -100;
        y_max = 100;
        Kx = (sx - 220) / (x_max / x_min);
        Ky = (sy - 220) / (y_max / y_min);
        SelectObject(hdc, blackpen);
        MoveToEx(hdc, 0, sy/2, NULL);
        LineTo(hdc, sx, sy/2);
        MoveToEx(hdc, sx / 2, 0, NULL);
        LineTo(hdc, sx / 2, sy);
        
        MoveToEx(hdc, 20, sy - 20, NULL);
        LineTo(hdc, sx - 20, 20);
        n = y_max - y_min;
        
        for (y = y_min; y < y_max; y += 5) {
            redpen = CreatePen(PS_SOLID, 2, RGB(255, 255-255./n*(y+y_min), 255-255./n*(y+y_min)));
            SelectObject(hdc, redpen);
            z = (sy/2) - 100 * sin(3.14 / 50 * sqrt(x_min * x_min + y * y));
            MoveToEx(hdc, x_min * Kx + (sx / 2) + y, (z + y), NULL);
            for (x = x_min; x < x_max; x += 5) {
                z = (sy/2) - 100 * sin(3.14 / 50 * sqrt(x * x + y * y));
                LineTo(hdc, x * Kx + sx / 2 + y, z + y);
            }
        }
 
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        DeleteObject(blackpen);
        DeleteObject(bluepen);
        DeleteObject(redpen);
        DeleteObject(brush);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Миниатюры
От размера окна координально меняется отрисовка   От размера окна координально меняется отрисовка  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2022, 17:54
Ответы с готовыми решениями:

Почему при изменении размера окна не меняется цвет заполнения?
Почему при изменении размера окна не меняется цвет заполнения?:no: ... case WM_PAINT: ... ... ...

C#:Новая отрисовка при смене размера окна
Здравствуйте, подскажите пожалуйста, как при смене размера окна, сделать так, чтобы предыдущие отрисованные объекты стирались, и...

При изменении размера окна программы меняется и размер изображения
Здравствуйте. Как сделать так, чтобы при изменении размера окна программы менялся и размер изображения ? Фигуры строил с помощью...

4
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
17.10.2022, 18:28
1) куча преобразований double\float в int
2) Код не стартанул на VS 2019
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: ссылка на неразрешенный внешний символ main в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ).
1>P:\Programming\Projects\Test\x64\Debug \Test.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

3)Прямые красные линии при сжатии превратились в кривые - строки 74-75 - что за эксперименты?

Добавлено через 3 минуты
Алгоритм маштабирования изображения
Отображение и масштабирование картинки в окне программы

Возможно, эти темы помогут
1
 Аватар для Morgot
336 / 129 / 18
Регистрация: 26.12.2010
Сообщений: 501
17.10.2022, 21:54
Цитата Сообщение от Laborant666 Посмотреть сообщение
2) Код не стартанул на VS 2019
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: ссылка на неразрешенный внешний символ main в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ).
1>P:\Programming\Projects\Test\x64\Debug \Test.exe : fatal error LNK1120: неразрешенных внешних элементов: 1
Потому что здесь WinMain. Поменяйте точку входа на него или же тип проект на консоль..

Andrej68689, пофиксить можно, вопрос в том, что именно должно выводиться? Любая картинка или именно вот эти линии?
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 7
18.10.2022, 10:14  [ТС]
Должно выводиться, как на скрине 32 при любом размере окна, чего не происходит
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
18.10.2022, 12:33
Andrej68689, то есть подождите, картинка должна не масштабироваться, а видоизменяться как нитка на ветру? 33 скриншот с прямыми линиями это не то, что вам нужно, вам нужно скриншот 32, с кривыми, как я понял. Это ж не стандартное масштабирование тогда сейчас в коде, в стандартном прямая горизонтальная линия не должна гнуться при сужении и выпрямляться из кривой при расширении

Добавлено через 4 минуты
строки 79-82 - всегда статичны? Разве не должны формулы ваши подстраиваться под размер окна? У вас там только x_min x_max хоть как-то видоизменяются при изменении размера окна. Всё остальное либо присвоено к определенному числу, либо статичной переменной
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2022, 12:33
Помогаю со студенческими работами здесь

При изменении размера текста в ListBox, меняется и его высота. Значение размера берется с ScrollBar
Private Sub ScrollBar_Change() ListBox.FontSize = ScrollBar.Value End Sub вот так вот написал, а меняется не только размер...

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

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

Отрисовка окна
Привет всем. Не правильная отрисовка окна, координаты мыши остаются на окне. Как исправить? Работа сделана в VC2008 на C++. ...

Отрисовка окна(C#)
Здравствуйте! столкнулся с такой проблемой, использую код private void Form1_Paint(object sender, PaintEventArgs e) { ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru