Перейти к содержанию
    

Нужна подсказка по emWin.

Имеем окно (FRAMEWIN "Состояние каналов" - рис.01), в котором (четыре раза в секунду) прорисовываем как виджеты (TEXT_SetText), так и 2D-графику (GUI_FillCircle/GUI_FillRect/GUI_DispDec).
При открытии нового окна (FRAMEWIN "Тест каналов" - рис.02) рамка FRAMEWIN портится нижним окном, но только 2D-графикой, виджеты отрисовываются корректно. Клиентская область не портится.
Как добиться корректной отрисовки окон. WM_Validate/WM_Invalidate не помогают.
 

01.jpg

02.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, M_Andrey said:

Как добиться корректной отрисовки окон. WM_Validate/WM_Invalidate не помогают.

Очевидно надо перекинуть callback-и периодической прорисовки из окна которое накрыли в окно которое поверх всех.   

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прорисовка у меня проходит не в callback-ах, а по другим событиям. Надо как-то WM-у указать не портить рамку, клиентскую область он-же не портит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19.02.2021 в 13:37, M_Andrey сказал:

GUI_FillCircle/GUI_FillRect/GUI_DispDec

Не спец по данному ГУИ, но эти функции похоже просто рисуют фигуры в экранной области, к окну отношения не имеют, поэтому, при операциях с окном емвин и знать о них не знает, а раз так, то только перерисовка всего окна поможет делу, есть такая фишка или нет - вопрос другой... Судя по рисунку, программа не отслеживает вновь открытое окно, изменение его состояния из активного в неактивное и продолжает тупо рисовать круги, но даже, если и отслеживала бы, то артефакты без перерисовки все-равно бы оставались... ИМХО, данный ГУЙ не предназначен, чтоб в его окнах что-то рисовали подобным образом, а если уж рисуете, то делайте либо в модальном окне с посл. отслеживанием его закрытия\перетаскивания, и блокируйте при этом рисование этих кружков.

19.02.2021 в 13:37, M_Andrey сказал:

Клиентская область не портится.

Ну не знаю, что тогда буква "s" делает в бордюре нового окна? Текст тоже как попало рисуете, а не виджетом label? Да и ваши кружки можно было спокойно рисовать виджетами radiobutton и ничего бы не рисовалось где попало...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/20/2021 at 8:39 AM, M_Andrey said:

Прорисовка у меня проходит не в callback-ах, а по другим событиям. Надо как-то WM-у указать не портить рамку, клиентскую область он-же не портит.

Да есть соблазн рисовать непосредственно по событиям, но так делать нельзя. ибо GUI не многозадачная. 
События должны передаваться в корневое окно.
А уже корневое окно рисует в нужной последовательности все производные окна с учетом клипинга и бэндинга. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 часов назад, AlexandrY сказал:

ибо GUI не многозадачная. 

Многозадачность тут ни при чем, просто менеджер окон ничего не будет "знать" об таком "рисовании", следовательно повлиять на то, что будет на экране никак не сможет, собственно емвину на это дело наплевать - глючить он не будет, но артефактов будет немало...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...