Графический интерфейс GDI в Microsoft Windows


Приложение PALETTE - часть 4


// Заполняем палитру градациями // серого цвета for (i=0; i < 256; i++) { pLogPal->palPalEntry[i].peRed = pLogPal->palPalEntry[i].peGreen = pLogPal->palPalEntry[i].peBlue = i; pLogPal->palPalEntry[i].peFlags = 0; }

// Создаем логическую палитру hPal = CreatePalette((LPLOGPALETTE) pLogPal); return 0; }

// При изменении размеров окна сохраняем // новые значения для ширины и высоты case WM_SIZE: { cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; }

// Рисование в окне case WM_PAINT: { RECT rc; int i, nWidth; HBRUSH hBrush;

// Получаем контекст отображения для // рисования во внутренней области окна hdc = BeginPaint(hwnd, &ps);

// Выбираем палитру hOldPalette = SelectPalette(hdc, hPal, FALSE);

// Реализуем логическую палитру RealizePalette(hdc);

// Координаты первого прямоугольника nWidth = 2; rc.left = rc.top = 0; rc.right = nWidth; rc.bottom = cyClient;

// Рисуем 256 прямоугольников во внутренней // области окна for (i=0; i < 256; i++) { // Выбираем кисть. Вы можете использовать одну из // двух приведенных ниже строк, переместив символ // комментария

// Косвенная ссылка на палитру // hBrush = CreateSolidBrush(PALETTERGB(i, i, i));

// Прямая ссылка на палитру hBrush = CreateSolidBrush(PALETTEINDEX(i));

// Закрашиваем прямоугольную область FillRect(hdc, &rc, hBrush);

// Координаты следующего прямоугольника rc.left = rc.right; rc.right += nWidth;

// Удаляем кисть DeleteBrush(hBrush); }

// Выбираем старую палитру SelectPalette(hdc, hOldPalette, TRUE);

// Освобождаем контекст отображения EndPaint(hwnd, &ps); return 0; }

// Это сообщение приходит при изменении // системной палитры. Наше приложение в ответ // на это сообщение заново реализует свою логическую // палитру и при необходимости перерисовывает окно case WM_PALETTECHANGED: { // Если это не наше окно, передаем управление // обработчику сообщения WM_QUERYNEWPALETTE if (hwnd == (HWND) wParam) break; }

// В ответ на это сообщение приложение должно // реализовать свою логическую палитру и // обновить окно case WM_QUERYNEWPALETTE: { HDC hdc; HPALETTE hOldPal; int nChanged;




Начало  Назад  Вперед