Добрый день.
В wxWidgets 3.1 под windows не работала прозрачность фона в wxStaticText. Нашёл решение http://trac.wxwidgets.org/attachment/ti ... cText.diff
Теперь теперь поле создаётся корректно, но когда меняется значение, то визуально оно накладывается на старые и держится так до тех пор, пока не будет обновлено методом Refresh(). Если значения меняются быстро, например в цикле, то Refresh() срабатывает только в самом конце и вместо меняющегося текста видно только чёрное пятно.
Без свойства wxTRANSPARENT_WINDOW всё работает хорошо и явно указывать Refresh() нигде не требуется.
Вот собственно вопрос в том, как выводить быстро меняющийся текст с прозрачным фоном?
Прозрачный фон wxStaticText msw Topic is solved
-
- In need of some credit
- Posts: 3
- Joined: Fri Dec 02, 2016 10:45 am
Прозрачный фон wxStaticText msw
- Attachments
-
- label.PNG (4.32 KiB) Viewed 2947 times
Re: Прозрачный фон wxStaticText msw
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?
Kakaja versija okoshek stoit? Kakaja tema?
Esli ustanavlivat snachala pustuju stroku i vyzvat Refresh() a potom novyj text i Refresh() - vse rabotaet?
-
- In need of some credit
- Posts: 3
- Joined: Fri Dec 02, 2016 10:45 am
Re: Прозрачный фон wxStaticText msw
Система windows 10 pro 64bit. Тема по умолчанию, попробовал с другими темами, эффект тот же. VisualStudio 2015. Библиотека собрана под x86 и проекты соответственно x86.
Если сначала ставить пустую строку, а потом с текстом, будет тоже самое. Отображаются все старые строки. Пробовал делать Disable(), SetLabel(text), Enable(). В этом случае старый текст становиться серым, но всё равно остаётся, а поверх него новая строка чёрным цветом.
Если изменить значение, сделать Refresh(), то будет работать как надо. Проблема в том, что если это делать в цикле, то Refresh() отрабатывает только после того как цикл закончится. Т.е. весь процесс наблюдается чёрное пятно, а после цикла остаётся нормальный текст без артефактов.
Если сначала ставить пустую строку, а потом с текстом, будет тоже самое. Отображаются все старые строки. Пробовал делать Disable(), SetLabel(text), Enable(). В этом случае старый текст становиться серым, но всё равно остаётся, а поверх него новая строка чёрным цветом.
Если изменить значение, сделать Refresh(), то будет работать как надо. Проблема в том, что если это делать в цикле, то Refresh() отрабатывает только после того как цикл закончится. Т.е. весь процесс наблюдается чёрное пятно, а после цикла остаётся нормальный текст без артефактов.
-
- In need of some credit
- Posts: 3
- Joined: Fri Dec 02, 2016 10:45 am
Re: Прозрачный фон wxStaticText msw
Решил проблему так. Вместо цикла в программе использовал таймер. Привязал к нему функцию, в которой производил изменения текста и указал Refresh().
Тему наверное, можно закрыть, но если будет предложено решение без использования Refresh(), то буду очень благодарен, т.к. из-за частых обновлений иногда видно, как мерцают фон, надписи и кнопка. Чтобы избежать мерцаний фона использовал wxBufferedPaintDC, а вот как избежать остальных не знаю.
P.S.: пробовал писать без цикла, последовательно SetLabel(), Refresh(), SetLable(), Refresh() и т.д. Срабатывал только последний Refresh().
Тему наверное, можно закрыть, но если будет предложено решение без использования Refresh(), то буду очень благодарен, т.к. из-за частых обновлений иногда видно, как мерцают фон, надписи и кнопка. Чтобы избежать мерцаний фона использовал wxBufferedPaintDC, а вот как избежать остальных не знаю.
P.S.: пробовал писать без цикла, последовательно SetLabel(), Refresh(), SetLable(), Refresh() и т.д. Срабатывал только последний Refresh().