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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
aleshkashell
In need of some credit
In need of some credit
Posts: 3
Joined: Fri Dec 02, 2016 10:45 am

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

Post by aleshkashell »

Добрый день.
В wxWidgets 3.1 под windows не работала прозрачность фона в wxStaticText. Нашёл решение http://trac.wxwidgets.org/attachment/ti ... cText.diff
Теперь теперь поле создаётся корректно, но когда меняется значение, то визуально оно накладывается на старые и держится так до тех пор, пока не будет обновлено методом Refresh(). Если значения меняются быстро, например в цикле, то Refresh() срабатывает только в самом конце и вместо меняющегося текста видно только чёрное пятно.
Image
Без свойства wxTRANSPARENT_WINDOW всё работает хорошо и явно указывать Refresh() нигде не требуется.
Вот собственно вопрос в том, как выводить быстро меняющийся текст с прозрачным фоном?
Attachments
label.PNG
label.PNG (4.32 KiB) Viewed 2945 times
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7458
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Post 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?
aleshkashell
In need of some credit
In need of some credit
Posts: 3
Joined: Fri Dec 02, 2016 10:45 am

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

Post by aleshkashell »

Система windows 10 pro 64bit. Тема по умолчанию, попробовал с другими темами, эффект тот же. VisualStudio 2015. Библиотека собрана под x86 и проекты соответственно x86.
Если сначала ставить пустую строку, а потом с текстом, будет тоже самое. Отображаются все старые строки. Пробовал делать Disable(), SetLabel(text), Enable(). В этом случае старый текст становиться серым, но всё равно остаётся, а поверх него новая строка чёрным цветом.
Если изменить значение, сделать Refresh(), то будет работать как надо. Проблема в том, что если это делать в цикле, то Refresh() отрабатывает только после того как цикл закончится. Т.е. весь процесс наблюдается чёрное пятно, а после цикла остаётся нормальный текст без артефактов.
aleshkashell
In need of some credit
In need of some credit
Posts: 3
Joined: Fri Dec 02, 2016 10:45 am

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

Post by aleshkashell »

Решил проблему так. Вместо цикла в программе использовал таймер. Привязал к нему функцию, в которой производил изменения текста и указал Refresh().
Тему наверное, можно закрыть, но если будет предложено решение без использования Refresh(), то буду очень благодарен, т.к. из-за частых обновлений иногда видно, как мерцают фон, надписи и кнопка. Чтобы избежать мерцаний фона использовал wxBufferedPaintDC, а вот как избежать остальных не знаю.

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