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


           

Создаем палитру на базе таблицы


// Удаляем контекст памяти DeleteObject(SelectObject(hMemDC, hbmp)); DeleteDC(hMemDC);

GlobalUnlock(hDib); return TRUE; }

// ------------------------------- // Функция DIBCreatePalette // Создаем палитру на базе таблицы цветов DIB // -------------------------------

HPALETTE DIBCreatePalette(HDIB hDib) { LPLOGPALETTE lpPal; HPALETTE hPal = NULL; HANDLE hLogPal; int i, wNumColors; LPSTR lpbi; LPBITMAPINFO lpbmi;

if (!hDib) return NULL;

lpbi = (LPSTR)GlobalLock(hDib); lpbmi = (LPBITMAPINFO)(lpbi + sizeof(BITMAPFILEHEADER));

// Определяем размер таблицы цветов wNumColors = DIBNumColors(lpbi);

// Если в DIB есть таблица цветов, создаем палитру if (wNumColors) { // Заказываем память для палитры hLogPal = GlobalAlloc(GHND, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * wNumColors);

if (!hLogPal) { GlobalUnlock(hDib); return NULL; }

// Получаем указатель на палитру lpPal = (LPLOGPALETTE)GlobalLock(hLogPal);

// Заполняем заголовок lpPal->palVersion = 0x300; lpPal->palNumEntries = wNumColors;

// Заполняем палитру for (i = 0; i < wNumColors; i++) { lpPal->palPalEntry[i].peRed = lpbmi->bmiColors[i].rgbRed;

lpPal->palPalEntry[i].peGreen = lpbmi->bmiColors[i].rgbGreen;

lpPal->palPalEntry[i].peBlue = lpbmi->bmiColors[i].rgbBlue;

lpPal->palPalEntry[i].peFlags = 0; }

// Создаем палитру hPal = CreatePalette(lpPal); if (!hPal) { GlobalUnlock(hLogPal); GlobalFree(hLogPal); return NULL; }

GlobalUnlock(hLogPal); GlobalFree(hLogPal); }

GlobalUnlock(hDib);

// Возвращаем идентификатор созданной палитры return hPal; }

Опишем функции, определенные в файле dib.cpp.


Содержание  Назад  Вперед