Как работать с AnimatePalette?
процедуру и повесил её на 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 !!
Когда я вставил InvalidateRect
после AnimatePalette,
то цвета действительно стали меняться.
Но, как я прочитал и проверил,
InvalidateRect просто полностью
перерисовывает окно (вызывая WM_PAINT),
а мне хотелось бы обойтись без перерисовки.
В DOS мне удавалось менять цвета
без перерисовки, в режиме 320x200x16,
и я надеялся, что подобную функцию в Windows
выполняет AnimatePalette.
Поробуй посмотреть здесь
http//mdfs.boom.ru/doc/vc4u/vcu11fi.htm#I16
там есть листинг(11.2) на c++ (у меня сразу заработал). Только не забудь поставить на экране 256 цветов. Как заставить работать с другим количеством цветов ещё не понял.
В 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]
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>