Page 1 of 1

Прозрачный фон wxStaticText msw

Posted: Wed Dec 07, 2016 6:02 pm
by aleshkashell
Добрый день.
В wxWidgets 3.1 под windows не работала прозрачность фона в wxStaticText. Нашёл решение http://trac.wxwidgets.org/attachment/ti ... cText.diff
Теперь теперь поле создаётся корректно, но когда меняется значение, то визуально оно накладывается на старые и держится так до тех пор, пока не будет обновлено методом Refresh(). Если значения меняются быстро, например в цикле, то Refresh() срабатывает только в самом конце и вместо меняющегося текста видно только чёрное пятно.
Image
Без свойства wxTRANSPARENT_WINDOW всё работает хорошо и явно указывать Refresh() нигде не требуется.
Вот собственно вопрос в том, как выводить быстро меняющийся текст с прозрачным фоном?

Re: Прозрачный фон wxStaticText msw

Posted: Thu Dec 08, 2016 5:19 pm
by ONEEYEMAN
Dobrogo vremeni sutok,
Kakaja versija okoshek stoit? Kakaja tema?
Esli ustanavlivat snachala pustuju stroku i vyzvat Refresh() a potom novyj text i Refresh() - vse rabotaet?

Re: Прозрачный фон wxStaticText msw

Posted: Fri Dec 09, 2016 1:15 pm
by aleshkashell
Система windows 10 pro 64bit. Тема по умолчанию, попробовал с другими темами, эффект тот же. VisualStudio 2015. Библиотека собрана под x86 и проекты соответственно x86.
Если сначала ставить пустую строку, а потом с текстом, будет тоже самое. Отображаются все старые строки. Пробовал делать Disable(), SetLabel(text), Enable(). В этом случае старый текст становиться серым, но всё равно остаётся, а поверх него новая строка чёрным цветом.
Если изменить значение, сделать Refresh(), то будет работать как надо. Проблема в том, что если это делать в цикле, то Refresh() отрабатывает только после того как цикл закончится. Т.е. весь процесс наблюдается чёрное пятно, а после цикла остаётся нормальный текст без артефактов.

Re: Прозрачный фон wxStaticText msw

Posted: Fri Dec 09, 2016 2:31 pm
by aleshkashell
Решил проблему так. Вместо цикла в программе использовал таймер. Привязал к нему функцию, в которой производил изменения текста и указал Refresh().
Тему наверное, можно закрыть, но если будет предложено решение без использования Refresh(), то буду очень благодарен, т.к. из-за частых обновлений иногда видно, как мерцают фон, надписи и кнопка. Чтобы избежать мерцаний фона использовал wxBufferedPaintDC, а вот как избежать остальных не знаю.

P.S.: пробовал писать без цикла, последовательно SetLabel(), Refresh(), SetLable(), Refresh() и т.д. Срабатывал только последний Refresh().