Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как перерисовать без мерцаний, мерцание статик текста 
:(
    Опции темы
TSasha
Дата 6.9.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 6.9.2010

Репутация: нет
Всего: нет



Всем привет. Помогите разобраться.
Создал значит приложение, где есть дочернее окно класа STATIC,  это текст который плавно меняет свой цвет.
Цвет задаю в WM_CTLCOLORSTATIC, перерисовку делаю вызовом InvalidateRect.
Короче всё работает, но текст статика при этом мерцает.
Побовал в WM_PAINTе делать двойную буферизацию.(но точно не уверен привильно-ли)
Код

case WM_PAINT:
{
       PAINTSTRUCT ps;
       HBITMAP hMemBmp;                    
       HDC hMemDc;
       hdc = BeginPaint(hWnd,&ps);
                    
       hMemDc = CreateCompatibleDC(hdc);
       hMemBmp = CreateCompatibleBitmap(hdc, GetDeviceCaps(hdc, HORZRES),GetDeviceCaps(hdc, VERTRES));
                    
       SelectObject(hMemDc, hMemBmp);

       BitBlt(hdc, 0, 0, GetDeviceCaps(hdc, HORZRES), GetDeviceCaps(hdc, VERTRES),hMemDc , 0,0, SRCCOPY);
            
       DeleteDC(hMemDc);
       DeleteObject(hMemBmp); 
       EndPaint(hWnd, &ps);   
       break;                
}

Пробовал добавлять свою обработку WM_ERASEBKGND
Код

case WM_ERASEBKGND: return true;

Но ничего даже не меняется. smile 
Не могу разобраться что не так, помогите плиз. 

PM MAIL   Вверх
okkonst
Дата 6.9.2010, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 5.9.2010
Где: Воронеж

Репутация: нет
Всего: 1



WS_CLIPCHILDREN в стилях родительского окна укажи. А с буферизацией - где отрисовка-то сама? Судя по всему, это обработчик WM_PAINT родительского окна? Он ничего не делает. Вернее, копирует из созданного совместимого контекста устройства, содержащего "пустой" битмап на DC окна. Причем, непонятно какого - статика или верхнего уровня..
PM MAIL   Вверх
VictorTsaregorodtsev
Дата 6.9.2010, 22:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 1
Всего: 8



Не надо ничего перерисовывать - надо просто палитру у нарисованного периодически менять.
См. на функции CreatеPalette, SelectPalette и прочие из этой группы. СелектПалетте надо будет подсовывать HDC нужного окна или визуального элемента.
Раз надо текст перекрашивать - то статик-окно так и останется, и в палитре для этого окна можно будет менять (для каждой очередной перекраски) только единственный элемент, соответствующий цвету исходно нарисованного в окне текста (цвет фона текста будет при этом оставаться неизменным, если надо и его перекрашивать - то в палитре надо будет менять не один, а 2 элемента)
PM MAIL WWW   Вверх
TSasha
Дата 6.9.2010, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 6.9.2010

Репутация: нет
Всего: нет



okkonst, WS_CLIPCHILDREN в стилях родителя не помогает.
Цитата

А с буферизацией - где отрисовка-то сама? 

В WinAPI я пока не особо силён. okkonst, а не подскажите как должно быть с отрисовкой?
 
Цитата

Не надо ничего перерисовывать - надо просто палитру у нарисованного периодически менять.

VictorTsaregorodtsev , а возможно реализовать без палитр?

Это сообщение отредактировал(а) TSasha - 7.9.2010, 00:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.