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

InvalidateRect или как перерисовывать с новыми значениями?

29.03.2015, 22:24. Показов 1836. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вечер добрый, есть такая вот функция, она принимает значения по нажатию кнопок, и задает, что рисовать, каким цветом и тоном.
Но в при попытке перерисовать новыми значениями InvalidateRect - отказывается перерисовывать её с новыми координатами. Вопрос, есть ли какая хитрость, или попросту отдельную функцию пилить на переопределение координат?
Собственно кусочек кода.
C++
1
2
3
4
5
6
7
8
case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            //hdc1 = hdc;
            // TODO: Add any drawing code here...
            drawShape(hWnd, hdc, shapeData, shapeSize, bShow, pt_x0);
            //DrawMenuBar(hWnd);
            EndPaint(hWnd, &ps);
            break;
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
void     drawShape(HWND  hWnd, HDC  hdc, SHAPE_DATA  shapeData, ShapeSize   shapeSize, BOOL bShow, UINT * pt_x)
{
    if (bShow)
    {
        int intensity[3] = { 100, 170, 255 };
        int brightness = intensity[shapeData.id_bright - ID_DARK];
 
        //  создаем кисть заданного цвета, запоминаем дескриптор кисти в hBrush
        HBRUSH  hBrush = CreateSolidBrush(RGB(
            shapeData.fRed ? brightness : 0,
            shapeData.fGreen ? brightness : 0,
            shapeData.fBlue ? brightness : 0)
            );
        //  дескриптор новой кисти hBrush записываем в контекст устройства, дескриптор
        //   старой кисти сохраняем в holdBrush
 
        HBRUSH  holdBrush = (HBRUSH)SelectObject(hdc, hBrush);
 
        RECT rect;   // определение объекта rect типа  RECT, где RECT стандартная
        // структура, задающая координаты левого верхнего и правого
        // нижнего угла прямоугольника , где
 
        GetClientRect(hWnd, &rect); // получили размер клиентского окна 
        // в объекте rect с помощью стандартной функции
 
        // определение центра фигуры (x0, y0) - всегда в центре клиентской области (окна)
        int x0 = rect.right / 4, x1, x2;
        int y0 = rect.bottom / 4, y1, y2;
        //  определение координат  прямоугольника и эллипса
        if (shapeSize == MIN)
        {
            x1 = rect.left + pt_x[0];    y1 = rect.top+pt_x[1];
            x2 = x0+pt_x[2];    y2 = y0 + pt_x[3];
        }
        else
        {
            x1 = y1 = 0;
            x2 = rect.right; y2 = rect.bottom;
        }
        //  определение координат  ромба в массиве структур pt[4]  типа POINT
        POINT pt[4];
        pt[0].x = (x1 + x2) / 2;         pt[0].y = y1;
        pt[1].x = x2;                pt[1].y = (y1 + y2) / 2;
        pt[2].x = (x1 + x2) / 2;    pt[2].y = y2;
        pt[3].x = x1;                pt[3].y = (y1 + y2) / 2;
 
        switch (shapeData.id_shape)
        {
            case ID_RECTANGLE:
                Rectangle(hdc, x1, y1, x2, y2);
                break;
            case ID_RHOMB:
                Polygon(hdc, pt, 4);
                break;
            case ID_ELLIPSE:
                Ellipse(hdc, x1, y1, x2, y2);
                break;
        }
        //  старую  кисть возвращаем в контекст,  кисть, которой рисовали - удаляем
 
        DeleteObject(SelectObject(hdc, holdBrush));
 
    }  //   конец тела if  (bShow)
}
Добавлено через 50 минут
Спасибо, если кто вдруг пишет уже ответ, нашёл в чем была соль. При создании массивов с точками, забыл указать static и она "потерялася я"(с) Гадя Петрович Хернова. >_< Тему можно закрывать (если оно тута есть) - был первый пост - ничего не умею - не знаю ^_^
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2015, 22:24
Ответы с готовыми решениями:

Переписать данные в dataGridView новыми значениями
Напомните плиз как сделать dataGridView пустым то есть при обновлении таблицы стереть все данные старые, а записать на их место новые

Перерисовать picturebox в соответствии с новыми значениями
Подскажите, пожалуйста, как можно перерисовать picturebox? Мне нужно при нажатии на кнопку, чтобы картинка менялась в соответствии со...

Пополнить массив, переданный в метод, новыми значениями, и отправить обратно
Народ, помогите!! Уже всю голову сломал. Если коротко, то нужно полнить массив, переданный в этот метод, новыми значениями,и отправить...

3
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
29.03.2015, 22:34
Хм.., причем тут InvalidateRect? Он ведь всё равно шлет WM_PAINT и отрисовка происходит как обычно.
Наверное проблема где то в состояниях программы, а не функции drawShape
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
29.03.2015, 22:38
Цитата Сообщение от rao Посмотреть сообщение
Хм.., причем тут InvalidateRect?
да ни причем
вот ответ
Цитата Сообщение от Djovenga Посмотреть сообщение
При создании массивов с точками, забыл указать static
вот при заходе в функцию все данные создавались заново
0
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
29.03.2015, 22:43
ValeryS, я это увидел когда появился мой ответ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.03.2015, 22:43
Помогаю со студенческими работами здесь

Как перерисовывать GDI+ у формы
У меня есть форма на котором рисую, но когда проведу поверх другое окно, то рисунок стирается, а мне нужно чтобы этого не было. Мне нужен...

Как правильно перерисовывать контролы?
Наследую от того же button, но не могу перерисовать его никак. В событии перерисовке вроде-бы пишу, а толку ноль. Как же это нужно...

Как перерисовывать окно в Win32 API?
Здравствуйте, при нажатие срелочки вверх должен выводиться текст, но возникает ошибка(использована неинициализированная локальная...

Выведите цифры числа по одной, в обычном порядке, разделяя их пробелами или новыми строками.
Цифры числа слева направо Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми...

Как правильно перерисовывать формы? Как это делается в нормальных программах? Нужна идея!
Хочется более-менее грамотный графический интерфейс сделать, чтобы на нормальную программу было похоже, а не на набор взаимосвязанных форм....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru