Графика на WinAPI - проблема с выводм
Народ помогите плиз.
Задача на окне (есть HWND окна) надо нарисовать прогрессбар самому ручками и на нем выводить проценты. Вроде ничего сложного два прямоугольника, и текст поверх них - фигня - ан нет, если вся эта штука какое то время работает (20 таких композиций отрабатывают в многопоточности и работают минуту, две) то сначала пропадает цвет прямоугольников, потом останавливается всякое изменение графики в окне на котором рисую, потом надо только перегружать программулину.
Вопрос: в чем может быть косяк?
P.S. бар сделан отдельным классом, все во вложении.
то я только рад посмотреть, но вот если взять стандартный бар, то в xp я не нашел как сделать его плоским.
Оригинальный Win32API таких ограничений не имеет..
А можете пример скинуть?
Да, я согласен, слово "нельзя" здесь неуместно. В документации о таких ограничениях ничего не сказано. Просто на форумах MSDN рекомендовали все функции рисования размещать в основном потоке. Но если эти рекомендации проигнорировать, то тогда нужно подумать об объектах синхронизации. Получается, что контекст устройства DC, представляющий основное окно приложения, является разделяемым ресурсом и доступ к нему из разных потоков необходимо синхронизировать.
Конечно. Правда, комментирован он плохо, но Вы, я уверен, разберетесь.[ATTACH]5139[/ATTACH]
Если у кого есть примеры как это сделать - выложите. Если есть вариант как изменить цвета, поведение и стиль стандартного бара и по верх него написать текст - то тоже не откажусь (пробовал сделать не получается, либо текст перемигивается - ни есть красиво, либо не показывается, стиль при перерисовке меняется - то же не совсем правильно.).
За пример спасибо, в принципе в точку, вот только вопрос по тексту выводимого поверх:
1. Таймер не вариантен - так как, допустим при том же процессе копирования - может быть очень мал файл и за короткий промежуток времени он не успеет обработать инфу.
2. Текст мигает - не как от этого уйти нельзя?
3. при малом количестве процентов (от 0 до 9) идет рисование по верх, то есть получается каша - не понятно - как от этого можно избавиться.
1. Это просто пример. В реале функция, производящая копирование, например, может посылать окну сообщение на каждой итерации чтения/записи.
2. Как использовать двойную буферизацию с битмапами я знаю, а вот про вывод текста - увы.
3. Попробовал отключить в системе визуальные эффекты - мне помогло. А почему так происходит - затрудняюсь ответить.
То есть как вариант сделать отправку сообщения из потока главному окну, а там в ветке wm_paint сделать перерисовку? можно попробовать.
Спасибо за предложение. Но вот вопрос то с тем багом при отрисовке все равно остается, почему текст поверх текста рисуется отлично - а прямоуглольнички - нет??? Вот я чего понять не могу)
2. Как использовать двойную буферизацию с битмапами я знаю, а вот про вывод текста - увы.
Точно так же, текст просто выводится на битмап
Сейчас попробую изменить внешний вид стандартного прогрессбара.
У кого какие еще будут предложения?
э
тому добру
а также простенькие программы по выводу
труетайпшрифтом в окно текста с цифрами
из регистра еах и тексты и время чтоб показывало..
есть у кого готовые зарисовки на эту тему..:?