палитра выбирается для активного окна,
// Выбираем логическую палитру в // контекст отображения hdc = GetDC(hwnd);
// При обработке сообщения WM_QUERYNEWPALETTE // палитра выбирается для активного окна, // а при обработке сообщения WM_PALETTECHANGED - // для фонового hOldPal = SelectPalette(hdc, hPal, (msg == WM_QUERYNEWPALETTE) ? FALSE : TRUE);
// Реализуем логическую палитру и выбираем // ее в контекст отображения nChanged = RealizePalette(hdc); SelectPalette(hdc, hOldPal, TRUE);
// Освобождаем контекст отображения ReleaseDC(hwnd, hdc);
// Если были изменения палитры, // перерисовываем окно if(nChanged) InvalidateRect(hwnd, NULL, TRUE);
return nChanged; }
case WM_DESTROY: { // Удаляем созданную нами // логическую палитру DeletePalette(hPal);
// Освобождаем память, выделенную для палитры LocalFree(pLogPal);
PostQuitMessage(0); return 0; }
default: break; } return DefWindowProc(hwnd, msg, wParam, lParam); }
// -------------------------------------------------------- // Функция PaletteInfo // Вывод некоторых сведений о палитре // --------------------------------------------------------
void PaletteInfo(void) { HDC hdc; int iPalSize, iRasterCaps; char szMsg[256]; char szPal[20];
// Получаем контекст отображения для // всего экрана hdc = GetDC(NULL);
// Определяем размер палитры и слово, // описывающее возможности драйвера // видеоконтроллера как растрового устройства iPalSize = GetDeviceCaps(hdc, SIZEPALETTE); iRasterCaps = GetDeviceCaps(hdc, RASTERCAPS);
// Проверяем, используется ли механизм палитр if(iRasterCaps & RC_PALETTE) { iRasterCaps = TRUE; lstrcpy(szPal, "используются"); } else { iRasterCaps = FALSE; lstrcpy(szPal, "не используются"); }
// Освобождаем контекст отображения ReleaseDC(NULL, hdc);
// Выводим сведения о палитре wsprintf(szMsg, "Палитры %s\n" "Размер системной палитры: %d\n", (LPSTR)szPal, iPalSize);
MessageBox(NULL, szMsg, "Palette Demo", MB_OK); }
В начале файла определена константа PALETTESIZE, значение которой равно размеру создаваемой приложением логической палитры:
Содержание Назад Вперед