Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2016, 17:24   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Заполнение окна прямоугольниками

Добрый день!
Столкнулся с такой вот интересной задачей.
Задача в принципе не сложная, но моя техническая реализация
мне кажется не совсем разумной.

Вся трудность заключается в сохранении текущих прямоугольников
при изменении размеров окна, или по приказу ОС на перерисовку.

думал создать контейнер для хранения текущих прямоугольников,
но это будет каждую 0.1 с кушать ресурсы памяти.

в итоге я получу аварийное завершение (((

может есть какое-то разумное решение этой проблемы ?

Спасибо !
Изображения
Тип файла: jpg Безымянный.JPG (19.0 Кб, 43 просмотров)
RAFA91 вне форума Ответить с цитированием
Старый 15.03.2016, 17:53   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
думал создать контейнер для хранения текущих прямоугольников,
но это будет каждую 0.1 с кушать ресурсы памяти.
в итоге я получу аварийное завершение (((
Как напишете — так и будет.
Кто заставляет каждый раз перевыделять память вместо использования существующей? (или хотя бы освобождать то, что уже не нужно)

Но вообще даже без освобождения пройдет немало времени пока память кончится если прямоугольников не 100500.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.03.2016, 18:09   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Как напишете — так и будет.
.
это понятно.

только прямоугольники могут перекрывать друг-друга по истечению времени 0.1 с.

в итоге время на перерисовку в WM_PAINT будет увеличиваться.

в принципе есть возможность перерисовать часть окна

Код:
InvalidateRect(hWnd,&Rec_1, TRUE);
но если окно начать таскать или изменять, то сразу все очистится.
RAFA91 вне форума Ответить с цитированием
Старый 15.03.2016, 18:18   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Из задания непонятно должны ли старые прямоугольники оставаться после добавления новых.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.03.2016, 18:22   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Из задания непонятно должны ли старые прямоугольники оставаться после добавления новых.
это было-бы очень просто. там написано прямоугольниками

давайте их все-же оставим

я в вин апи всех тонкостей не знаю , но мне лезит в голову только

хранение всех созданных прямоугольников в контейнере.

но это очень опасно. программа ведь может работать час.......
RAFA91 вне форума Ответить с цитированием
Старый 15.03.2016, 18:26   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну проверяйте периодически какие прямоугольники уже полностью скрыты другими и удаляйте их. Другие варианты вряд ли есть.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.03.2016, 18:29   #7
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну проверяйте периодически какие прямоугольники уже полностью скрыты другими и удаляйте их. Другие варианты вряд ли есть.
а если сделать недействительным часть окна и туда вписать новый

прямоугольник ?

Код:
InvalidateRect();
может очистить часть.
RAFA91 вне форума Ответить с цитированием
Старый 15.03.2016, 18:46   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну вы ж уже узнали, что без перерисовки по WM_PAINT
Цитата:
если окно начать таскать или изменять, то сразу все очистится
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.03.2016, 12:40   #9
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

а с чего вы решили, что прямоугольники должны перекрывать друг-друга ?

там сказано заполнение окна, а каким образом оно будет заполнено - это уже дело фантазии.
Изображения
Тип файла: jpg Безымянный.JPG (40.4 Кб, 35 просмотров)

Последний раз редактировалось RAFA91; 16.03.2016 в 13:30.
RAFA91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генетический алгоритм для покрытия матрицы прямоугольниками BDA Помощь студентам 3 10.11.2014 13:39
Работа с массивом и прямоугольниками. newBieInJava Общие вопросы по Java, Java SE, Kotlin 1 28.12.2013 22:05
Алгоритм заполнения области прямоугольниками sciyy Фриланс 5 23.11.2013 01:33
задача с прямоугольниками ilyha93 Помощь студентам 7 20.02.2012 20:37
Ось с прямоугольниками, найти общую площадь sp.caster Паскаль, Turbo Pascal, PascalABC.NET 30 23.04.2011 08:27