M_Andrey 0 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба Имеем окно (FRAMEWIN "Состояние каналов" - рис.01), в котором (четыре раза в секунду) прорисовываем как виджеты (TEXT_SetText), так и 2D-графику (GUI_FillCircle/GUI_FillRect/GUI_DispDec). При открытии нового окна (FRAMEWIN "Тест каналов" - рис.02) рамка FRAMEWIN портится нижним окном, но только 2D-графикой, виджеты отрисовываются корректно. Клиентская область не портится. Как добиться корректной отрисовки окон. WM_Validate/WM_Invalidate не помогают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба 2 hours ago, M_Andrey said: Как добиться корректной отрисовки окон. WM_Validate/WM_Invalidate не помогают. Очевидно надо перекинуть callback-и периодической прорисовки из окна которое накрыли в окно которое поверх всех. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M_Andrey 0 20 февраля, 2021 Опубликовано 20 февраля, 2021 · Жалоба Прорисовка у меня проходит не в callback-ах, а по другим событиям. Надо как-то WM-у указать не портить рамку, клиентскую область он-же не портит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 21 февраля, 2021 Опубликовано 21 февраля, 2021 (изменено) · Жалоба 19.02.2021 в 13:37, M_Andrey сказал: GUI_FillCircle/GUI_FillRect/GUI_DispDec Не спец по данному ГУИ, но эти функции похоже просто рисуют фигуры в экранной области, к окну отношения не имеют, поэтому, при операциях с окном емвин и знать о них не знает, а раз так, то только перерисовка всего окна поможет делу, есть такая фишка или нет - вопрос другой... Судя по рисунку, программа не отслеживает вновь открытое окно, изменение его состояния из активного в неактивное и продолжает тупо рисовать круги, но даже, если и отслеживала бы, то артефакты без перерисовки все-равно бы оставались... ИМХО, данный ГУЙ не предназначен, чтоб в его окнах что-то рисовали подобным образом, а если уж рисуете, то делайте либо в модальном окне с посл. отслеживанием его закрытия\перетаскивания, и блокируйте при этом рисование этих кружков. 19.02.2021 в 13:37, M_Andrey сказал: Клиентская область не портится. Ну не знаю, что тогда буква "s" делает в бордюре нового окна? Текст тоже как попало рисуете, а не виджетом label? Да и ваши кружки можно было спокойно рисовать виджетами radiobutton и ничего бы не рисовалось где попало... Изменено 21 февраля, 2021 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 21 февраля, 2021 Опубликовано 21 февраля, 2021 · Жалоба On 2/20/2021 at 8:39 AM, M_Andrey said: Прорисовка у меня проходит не в callback-ах, а по другим событиям. Надо как-то WM-у указать не портить рамку, клиентскую область он-же не портит. Да есть соблазн рисовать непосредственно по событиям, но так делать нельзя. ибо GUI не многозадачная. События должны передаваться в корневое окно. А уже корневое окно рисует в нужной последовательности все производные окна с учетом клипинга и бэндинга. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба 16 часов назад, AlexandrY сказал: ибо GUI не многозадачная. Многозадачность тут ни при чем, просто менеджер окон ничего не будет "знать" об таком "рисовании", следовательно повлиять на то, что будет на экране никак не сможет, собственно емвину на это дело наплевать - глючить он не будет, но артефактов будет немало... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться