В глобальную переменную hPal записывается
hPal = CreatePalette((LPLOGPALETTE) pLogPal);
В глобальную переменную hPal записывается идентификатор созданной логической палитры.
Обработчик сообщения WM_SIZE определяет и сохраняет размеры внутренней области окна приложения, необходимые для рисования.
Рисование выполняется, как и следовало ожидать, при обработке сообщения WM_PAINT.
После получения контекста отображения приложение выбирает в него и реализует логическую палитру:
hOldPalette = SelectPalette(hdc, hPal, FALSE); RealizePalette(hdc);
Далее приложение в цикле рисует 256 прямоугольников шириной 2 пиксела. Высота этих прямоугольников равна высоте внутренней области окна приложения. Для каждого прямоугольника создается кисть, причем цвет кисти определяется как ссылка на элемент логической палитры с использованием макрокоманды PALETTEINDEX:
for (i=0; i < 256; i++) { hBrush = CreateSolidBrush(PALETTEINDEX(i)); FillRect(hdc, &rc, hBrush); rc.left = rc.right; rc.right += nWidth; DeleteBrush(hBrush); }
После использования кисти она удаляется.
Вы можете попробовать создавать кисть при помощи макрокоманды PALETTERGB:
hBrush = CreateSolidBrush(PALETTERGB(i, i, i));
Перед возвращением управления обработчик сообщения WM_PAINT выбирает в контекст отображения старую палитру:
SelectPalette(hdc, hOldPalette, TRUE);
Рассмотрим теперь обработчики сообщений WM_PALETTECHANGED и WM_QUERYNEWPALETTE.
Обработчик сообщения WM_PALETTECHANGED получает управление, когда какое-либо приложение изменяет системную палитру. Так как наше приложение тоже может изменить системную палитру, оно также может выступать инициатором рассылки этого сообщения.
Параметр wParam сообщения WM_PALETTECHANGED содержит идентификатор окна приложения, изменившего палитру. Если этот параметр равен идентификатору нашего окна, ничего делать не надо, поэтому мы просто выходим из функции окна:
case WM_PALETTECHANGED: { if (hwnd == (HWND) wParam) break; }
В противном случае управление передается обработчику сообщения WM_QUERYNEWPALETTE, который выполняет реализацию логической палитры приложения и перерисовку окна.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий