Графика для Windows средствами DirectDraw
Шрифт:
Перед тем как инициализировать DirectDraw, класс DirectDrawWin вызывает функцию SelectDriver, чтобы производные классы могли выбрать драйвер DirectDraw при наличии нескольких вариантов. В программе BmpView мы отказываемся от этой возможности и позволяем выбрать первичный драйвер по умолчанию. Это сделано потому, что для вывода диалоговых окон используется механизм GDI, а GDI может выводить только на первичное видеоустройство (которому соответствует первичный драйвер DirectDraw).
Следующим этапом инициализации приложения является вызов функции SelectInitialDisplayMode, которую мы обязаны переопределить. Наша
Листинг 5.6. Функция BmpViewWin::SelectInitialDisplayMode
Помимо выбора исходного видеорежима функция SelectInitialDisplayMode используется для подготовки двух массивов: в первом хранятся сведения о палитровых (palettemode), а во втором — о беспалитровых (nonpalettemode) видеорежимах. Мы воспользуемся этими массивами позднее, при отображении диалогового окна. Когда пользователь выбирает файл с палитровым изображением, в список включаются только палитровые режимы; для беспалитровых режимов дело обстоит аналогично. Обратите внимание — в подготовленные массивы (коллекции структур DisplayModeDescription) включены строки, отображаемые в диалоговом окне.
Функция SelectInitialDisplayMode также используется для вызова функции GetSystemPalette, создающей палитру DirectDraw на базе системной палитры. Функция GetSystemPalette выглядит так:
С
помощью функции Win32 GetSystemPaletteEntries мы получаем содержимое текущей палитры Windows и создаем по ее образцу палитру DirectDraw функцией CreatePalette интерфейса DirectDraw. Указатель на созданную палитру syspal позднее будет применяться для восстановления системной палитры; это обеспечивает правильное отображение диалоговых окон Windows в 8-битных видеорежимах.Следующий шаг инициализации приложения, заслуживающий нашего внимания, — функция OnCreate. В функции OnCreate, переопределенной классом BmpViewWin, происходит создание и отображение диалогового окна:
Функция ShowDialog вызывается при запуске приложения и при выборе нового файла. ShowDialog подготавливает DirectDraw к отображению диалогового окна, выводит окно, получает информацию о выбранном BMP-файле и выбранном видеорежиме и отображает содержимое файла. Функция ShowDialog приведена в листинге 5.7.
Листинг 5.7. Функция ShowDialog