Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как работать с AnimatePalette?

1.4K
26 августа 2001 года
emaximen
3 / / 20.06.2000
Однажды я написал следующую
процедуру и повесил её на WM_TIMER

hDC = GetDC(hwnd);
hOldPal = SelectPalette(hDC,hPalette,FALSE);
RealizePalette(hDC);
AnimatePalette(hPalette, 0, 12, palEntries);
SelectPalette(hDC, hOldPal, FALSE);
ReleaseDC(hwnd, hDC);
... (дальше циклическая
перестановка в palEntries)

В процедуре, подвешенной к WM_PAINT,
я выбирал палитру hPalette и рисовал
своими цветами, используя PALETTEINDEX(i).

Когда я изменял размеры окна,
то есть вызывал WM_PAINT, то цвета менялись.
Но я читал, что они должны меняться сразу,
без перерисовки. В чём дело?
Аноним
Hi !!

Попробуйте вызывать Invalidate();

With best regards VitSoft
http//www.development.efficientit.com
1.4K
28 августа 2001 года
emaximen
3 / / 20.06.2000
Спасибо за совет насчёт Invalidate.
Когда я вставил InvalidateRect
после AnimatePalette,
то цвета действительно стали меняться.
Но, как я прочитал и проверил,
InvalidateRect просто полностью
перерисовывает окно (вызывая WM_PAINT),
а мне хотелось бы обойтись без перерисовки.

В DOS мне удавалось менять цвета
без перерисовки, в режиме 320x200x16,
и я надеялся, что подобную функцию в Windows
выполняет AnimatePalette.
Аноним
Сам с этим мучаюсь ) именно без Invalidate
Поробуй посмотреть здесь
http//mdfs.boom.ru/doc/vc4u/vcu11fi.htm#I16
там есть листинг(11.2) на c++ (у меня сразу заработал). Только не забудь поставить на экране 256 цветов. Как заставить работать с другим количеством цветов ещё не понял.
1.4K
05 сентября 2001 года
emaximen
3 / / 20.06.2000
Спасибо за последний совет!
В 256-цветном режиме действительно заработало без перерисовки!
Кстати,
1) я с самого начала использовал тот же пример
2) в DOS я тоже всё делал в режиме с 256 цветами (320*200*256, а не 16).

Наверное, в 256-цветном режиме видеокарточки хранят палитру отдельно от матрицы изображения, что и позволяет менять цвета без перерисовки.
В других режимах, видимо, это невозможно, и тогда функция AnimatePalette является синонимом SetPaletteEntries, то есть работает только на уровне объектов Windows.

Полагаю, тему можно считать закрытой.
Аноним
Да это скорей свего так.
и если вызвать GetDeviceCaps(hDC, RASTERCAPS)
то при 256 цветах вернется RC_PALETTE (палтры держаться) а при большем количестве цветов этот бит не установлен, тоесть их нет.
У меня была идея взять нарисованое изображение как bitmap и заменять цвета одного цвета на другой. Это может сработать если изображение очень сложное и полностью перерисовывается очень долго. Если будут идеи нипиши в форум(сюда) или на почту [EMAIL]rborisov@mail.ru[/EMAIL]
Аноним
<TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD>Quote<HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
On 2001-09-03 1123, Anonymous wrote
Сам с этим мучаюсь именно без Invalidate
Поробуй посмотреть здесь
http//mdfs.boom.ru/doc/vc4u/vcu11fi.htm#I16
там есть листинг(11.2) на c++ (у меня сразу заработал). Только не забудь поставить на экране 256 цветов. Как заставить работать с другим количеством цветов ещё не понял.
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог