Стэн Трухильо - Графика для Windows средствами DirectDraw

Тут можно читать онлайн Стэн Трухильо - Графика для Windows средствами DirectDraw - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Графика для Windows средствами DirectDraw
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.88/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Стэн Трухильо - Графика для Windows средствами DirectDraw краткое содержание

Графика для Windows средствами DirectDraw - описание и краткое содержание, автор Стэн Трухильо, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Графика для Windows средствами DirectDraw - читать онлайн бесплатно полную версию (весь текст целиком)

Графика для Windows средствами DirectDraw - читать книгу онлайн бесплатно, автор Стэн Трухильо
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

CRect bmprect;

int x,y;

int xscroll, yscroll;

int xlimit, ylimit;

BOOL update_screen;

DisplayModeArray palettemode, nonpalettemode;

};

Единственной открытой ( public) функцией класса является конструктор, используемый для инициализации переменных. Далее мы объявляем четыре обработчика сообщений:

• OnKeyDown()

• OnRButtonDown()

• OnCreate()

• OnDestroy()

Функция OnKeyDonw()обрабатывает нажатия нескольких клавиш, среди которых клавиши со стрелками, Home, End, Page Up, Page Down, Enter, пробел и Escape.

Функции OnCreate()и OnDestroy()предназначены соответственно для инициализации и освобождения структур данных приложения. В частности, функция OnCreate()создает диалоговое окно для выбора BMP-файла, а функция OnDestroy()уничтожает его.

Далее следуют объявления нескольких закрытых переменных. Функция SelectInitialDisplayMode()похожа на версию, созданную DirectDraw AppWizard и использованную в прошлых программах, но в нее внесены некоторые изменения. Кроме выбора исходного видеорежима, эта функция сохраняет текущую палитру Windows с помощью функции GetSystemPalette()(которая объявляется несколькими строками ниже функции SelectInitialDisplayMode()).

Функция CreateCustomSurfaces()объявляется и определяется в объявлении класса. В отличие от других программ, рассмотренных нами, BmpView не отображает никаких вспомогательных поверхностей, поэтому эта функция не делает ничего. Однако из-за того, что функция DirectDrawWin::CreateCustomSurfaces()является чисто виртуальной, нам приходится объявить и определить ее минимальную реализацию.

Функция DrawScene()отвечает за графический вывод и переключение страниц. Поскольку нашей программе незачем постоянно обновлять экран, функция DrawScene()делает это лишь в ответ на пользовательский ввод. Этим она отличается от других программ, в которых экран обновлялся непрерывно. Функция RestoreSurfaces()восстанавливает поверхности в случае их потери.

Функция ShowDialog()выводит диалоговое окно для выбора BMP-файла. Функция LoadBmp()по имени, полученному из диалогового окна, загружает BMP-файл на поверхность и инициализирует переменные x, y, xscroll, yscroll, xlimitи ylimit. Эти переменные предназначены для позиционирования поверхности в случае, если размер поверхности BMP-файла превышает размеры первичной поверхности.

Затем мы объявляем восемь функций, вызываемых при нажатии конкретных клавиш:

• PageUp()

• PageDown()

• Home()

• End()

• Left()

• Right()

• Up()

• Down()

Класс содержит несколько переменных, часть из которых упоминалась выше. Их назначение рассматривается при описании функций.

Инициализация приложения

Перед тем как инициализировать DirectDraw, класс DirectDrawWinвызывает функцию SelectDriver(), чтобы производные классы могли выбрать драйвер DirectDraw при наличии нескольких вариантов. В программе BmpView мы отказываемся от этой возможности и позволяем выбрать первичный драйвер по умолчанию. Это сделано потому, что для вывода диалоговых окон используется механизм GDI, а GDI может выводить только на первичное видеоустройство (которому соответствует первичный драйвер DirectDraw).

Следующим этапом инициализации приложения является вызов функции SelectInitialDisplayMode(), которую мы обязаны переопределить. Наша версия SelectInitialDisplayMode()выбирает видеорежим с параметрами 640x480x16. Исходный видеорежим не так уж важен, потому что он, скорее всего, будет переопределен пользователем при выборе BMP-файла. Однако функция SelectInitialDisplayMode()(см. листинг 5.6) выполняет две дополнительные задачи.

Листинг 5.6. Функция BmpViewWin::SelectInitialDisplayMode()

int BmpViewWin::SelectInitialDisplayMode() {

DisplayModeDescription desc;

int i, nummodes=GetNumDisplayModes();

DWORD w,h,d;

for (i=0;i

GetDisplayModeDimensions(i, w, h, d);

desc.w=w;

desc.h=h;

desc.d=d;

desc.desc.Format("%dx%dx%d", w, h, d );

if (d==8) palettemode.Add(desc);

else nonpalettemode.Add(desc);

}

DWORD curdepth=GetDisplayDepth();

for (i=0;i>nummodes;i++) {

GetDisplayModeDimensions(i, w, h, d);

if (w==640 && h==480 && d==curdepth) return i;

}

for (i=0;i

GetDisplayModeDimensions(i, w, h, d);

if (d==curdepth) return i;

}

for (i=0;i>nummodes;i++) {

GetDisplayModeDimensions(i, w, h, d);

if (w==640 && h==480) return i;

}

GetSystemPalette();

return 0;

}

Помимо выбора исходного видеорежима функция SelectInitialDisplayMode()используется для подготовки двух массивов: в первом хранятся сведения о палитровых ( palettemode), а во втором — о беспалитровых ( nonpalettemode) видеорежимах. Мы воспользуемся этими массивами позднее, при отображении диалогового окна. Когда пользователь выбирает файл с палитровым изображением, в список включаются только палитровые режимы; для беспалитровых режимов дело обстоит аналогично. Обратите внимание — в подготовленные массивы (коллекции структур 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;

}

Выбор и отображение BMP-файла

Функция ShowDialog()вызывается при запуске приложения и при выборе нового файла. ShowDialog()подготавливает DirectDraw к отображению диалогового окна, выводит окно, получает информацию о выбранном BMP-файле и выбранном видеорежиме и отображает содержимое файла. Функция ShowDialog()приведена в листинге 5.7.

Листинг 5.7. Функция ShowDialog()

void BmpViewWin::ShowDialog() {

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стэн Трухильо читать все книги автора по порядку

Стэн Трухильо - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Графика для Windows средствами DirectDraw, автор: Стэн Трухильо. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x