Графика для Windows средствами DirectDraw



Инициализация приложения - часть 2


Когда пользователь выбирает файл с палитровым изображением, в список включаются только палитровые режимы; для беспалитровых режимов дело обстоит аналогично. Обратите внимание — в подготовленные массивы (коллекции структур DisplayModeDescription) включены строки, отображаемые в диалоговом окне.

Функция SelectInitialDisplayMode() также используется для вызова функции GetSystemPalette(), создающей палитру DirectDraw на базе системной палитры. Функция GetSystemPalette() выглядит так:


void BmpViewWin::GetSystemPalette() { PALETTEENTRY pe[256]; HDC dc = ::GetDC( 0 ); if (GetDeviceCaps(dc, RASTERCAPS) & RC_PALETTE) { GetSystemPaletteEntries( dc, 0, 256, pe ); ddraw2->CreatePalette( DDPCAPS_8BIT, pe, &syspal, 0 ); } ::ReleaseDC( 0, dc ); }


С помощью функции Win32 GetSystemPaletteEntries() мы получаем содержимое текущей палитры Windows и создаем по ее образцу палитру DirectDraw функцией CreatePalette() интерфейса DirectDraw. Указатель на созданную палитру syspal позднее будет применяться для восстановления системной палитры; это обеспечивает правильное отображение диалоговых окон Windows в 8-битных видеорежимах.

Следующий шаг инициализации приложения, заслуживающий нашего внимания, - функция OnCreate(). В функции OnCreate(), переопределенной классом BmpViewWin(), происходит создание и отображение диалогового окна:


int BmpViewWin::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (DirectDrawWin::OnCreate(lpCreateStruct) == -1) return -1;

ShowDialog();

return 0; }





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