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

Как не подвергать закрашиванию Static?

15.09.2019, 00:41. Показов 572. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

В окне рисуются некоторые графики. Есть в том числе и горизонтальная ось, подписи её — элементы (окна) Static. При перемещении окна приходится перерисовывать все линии — графики и оси — чтобы после захода окна за область рабочего стола они не стирались с окна. Для этого я при каждой перерисовке создаю закрашенный белый прямоугольник и все линии вывожу вновь. Всё бы ничего, но подписи горизонтальной оси (подписи вертикальной находятся вне прямоугольника) исчезают: остаются "под прямоугольником". Чтобы их вернуть, скрываю и показываю каждый Static после отпускания окна. Проделывать это во время каждой перерисовки бесполезно — перемещение окна тогда "тормозит". Может быть, есть какой-то способ сохранять Static нетронутым заливкой прямоугольника?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.09.2019, 00:41
Ответы с готовыми решениями:

Как изменить свойство non-static объекта из static метода
Понимаю, что такое не задумано средствами Net Framework, но у меня из-за этого не работает одна фишка, которую я месяц писал, вообщем у...

Как правильно разместить static поверх других static-ов
Есть кнопка, нажимая на которую становится видно статик. проблема в том, что статик отображатеся сзади других статиков и кнопок. как...

Как обратится к non static property из static метода
День добрый, сразу вопрос static - как правильно статический или статичный? У меня есть некий метод, у которого есть статичный метод...

2
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
15.09.2019, 18:12
Здравствуйте!
Покажите код.
0
0 / 0 / 0
Регистрация: 26.07.2016
Сообщений: 2
17.09.2019, 17:10  [ТС]
Эта функция расчерчивает систему координат. n - число точек в графике (подписей на горизонтальной оси). Если redraw ложно, значит, вызов происходит при изменении набора графиков на плоскости (когда нужно очистить область рисования графиков), если истинно - вызов при перемещении окна (просто рисуем все выбранные графики).

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
bool PreDraw(HWND hwnd, int n, HDC hdc, bool redraw)
{
    int i, k, width, height;
    RECT Rec;
 
    GetWindowRect(hwnd, &Rec);
    width = Rec.right - Rec.left;
    height = Rec.bottom - Rec.top;
    k = (height - 100) / 20;
    if (!redraw)
    {
        SelectObject(hdc, GetStockObject(18));
    }
    else
    {
        SelectObject(hdc, GetStockObject(NULL_BRUSH));
    }
    Rectangle(hdc, 50, 50, width - 25, height - 50 + 1);
    MoveToEx(hdc, 50, 50 + (height - 100) / 2, (LPPOINT)NULL);
    LineTo(hdc, 50 + (width - 75), 50 + (height - 100) / 2);
    for (i = 1; i <= n; i++)
    {
        MoveToEx(hdc, 50 + (width - 75) / (n + 1) * i, 50 + (height - 100) / 2 + 10, (LPPOINT)NULL);
        LineTo(hdc, 50 + (width - 75) / (n + 1) * i, 50 + (height - 100) / 2 - 10);
    }
    for (i = -10; i < 11; i++)
    {
        MoveToEx(hdc, 35, 50 + (height - 100) / 2 - i * k, (LPPOINT)NULL);
        LineTo(hdc, 65, 50 + (height - 100) / 2 - i * k);
    }
    return 0;
}
Вызов идёт отсюда:

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
void follow_cb(HWND hwnd, int height, int width, double prof00[], double prof01[], double prof10[], double prof11[], bool redraw)
{
    PAINTSTRUCT ps;
    HDC hdc;
    HPEN clr;
    hdc = BeginPaint(hwnd, &ps);
    hdc = GetDC(hwnd);
 
    PreDraw(hwnd, F_PARAMS, hdc, redraw);
    if (IsDlgButtonChecked(hwnd, 68))
    {
        clr = CreatePen(PS_SOLID, 2, RGB(0, 0, 128));
        DrawFunc(prof10, width, height, F_PARAMS, clr, hdc, upw);
    }
    if (IsDlgButtonChecked(hwnd, 69))
    {
        clr = CreatePen(PS_SOLID, 1, RGB(0, 0, 128));
        DrawFunc(prof11, width, height, F_PARAMS, clr, hdc, upw);
    }
    if (IsDlgButtonChecked(hwnd, 70))
    {
        clr = CreatePen(PS_SOLID, 2, RGB(0, 128, 0));
        DrawFunc(prof00, width, height, F_PARAMS, clr, hdc, upw);
    }
    if (IsDlgButtonChecked(hwnd, 71))
    {
        clr = CreatePen(PS_SOLID, 1, RGB(0, 128, 0));
        DrawFunc(prof01, width, height, F_PARAMS, clr, hdc, upw);
    }
    ReleaseDC(hwnd, hdc);
    EndPaint(hwnd, &ps);
}
А вот оконная процедура.

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
LRESULT CALLBACK DiagramProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int i, turns;
    static double prof00[F_PARAMS], prof01[F_PARAMS], prof10[F_PARAMS], prof11[F_PARAMS];
 
    switch(message)
    {
        case WM_PAINT:
            follow_cb(hwnd, 100 + 25 * 20, 75 + (F_PARAMS + 1) * 25, prof00, prof01, prof10, prof11, 1);
            break;
        case WM_CTLCOLORSTATIC:
            if (    (HWND)lParam == GetDlgItem(h_Diagram, 0)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 1)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 2)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 3)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 4)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 5)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 6)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 7)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 8)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 9)  ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 10) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 11) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 12) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 13) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 14) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 15) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 16) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 17) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 18) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 19) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 20) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 21) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 22) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 23) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 24) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 25) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 26) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 27) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 28) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 29) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 30) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 31) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 32) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 33) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 34) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 35) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 36) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 37) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 38) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 39) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 40) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 41) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 42) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 43) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 44) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 45) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 46) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 47) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 48) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 49) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 50) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 51) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 52) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 53) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 54) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 55) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 56) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 57) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 58) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 59) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 60) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 61) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 62) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 63) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 64) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 65) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 66) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 67) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 68) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 69) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 70) ||
                    (HWND)lParam == GetDlgItem(h_Diagram, 71)  )
            {
                SetBkMode((HDC)wParam, TRANSPARENT);
                return (INT_PTR)GetStockObject(NULL_BRUSH);
            }
            break;
        case WM_COMMAND:
            if (!IsDlgButtonChecked(hwnd, LOWORD(wParam)))
            {
                CheckDlgButton(hwnd, LOWORD(wParam), BST_CHECKED);
            }
            else
            {
                CheckDlgButton(hwnd, LOWORD(wParam), BST_UNCHECKED);
            }
            for (i = 0; i < F_PARAMS; i++)
            {
                prof00[i] = prof_func(bars, num_bars, 5 + 2 * i, i_b, i_e, 0, 0, &turns, e, eg);
                prof01[i] = prof_func(bars, num_bars, 5 + 2 * i, i_b, i_e, 0, 1, &turns, e, eg);
                prof10[i] = prof_func(bars, num_bars, 5 + 2 * i, i_b, i_e, 1, 0, &turns, e, eg);
                prof11[i] = prof_func(bars, num_bars, 5 + 2 * i, i_b, i_e, 1, 1, &turns, e, eg);
            }
            follow_cb(hwnd, 100 + 25 * 20, 75 + (F_PARAMS + 1) * 25, prof00, prof01, prof10, prof11, 0);
            for (i = 0; i < F_PARAMS; i++)
            {
                ShowWindow(h_np[i], SW_HIDE);
                ShowWindow(h_np[i], SW_SHOW);
            }
            break;
        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.09.2019, 17:10
Помогаю со студенческими работами здесь

Обращение к не static базе данных из static-метода
Есть у меня БД .sqlite . Она создаётся из не static метода: public IDbConnection database; public void SetupDb() { ...

Ошибка: non-static variable this cannot be referenced from a static context
Добрый вечер! Не пинайте сильно ногами, недавно решил взяться за обучение языку Java, что в мои годы уже подвиг сам по себе. Зубрю...

Ошибка “non-static method cannot be referenced from a static context”
Проблема в том, что в одном классе он просто сделать методы static, а в другом - требует обратного и я уже понятия не имею что сделать ...

Ошибка: Cannot make a static reference to the non-static method
решил учить андроид. решил написать чат, но при создании сервера на Java по примеру на сайте у меня возникла ошибка: Cannot make a...

Non-static variable a cannot be referenced from a static context
non-static variable a cannot be referenced from a static context public class MyClass { private int a=2; private boolean...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru