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

Здесь есть возможность читать онлайн «Стэн Трухильо - Графика для Windows средствами DirectDraw» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика для Windows средствами DirectDraw: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика для Windows средствами DirectDraw»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика для Windows средствами DirectDraw», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Наконец, функция ShowDialog()выводит диалоговое окно для выбора AVI-файла и ожидает ввод от пользователя. Однако перед тем, как обсуждать ShowDialog(), необходимо рассмотреть функцию SelectInitialDisplayMode(), которая вызывается при использовании функции OnCreate()класса DirectDrawWin.

Функция SelectInitialDisplayMode()

Как упоминалось выше, функция SelectInitialDisplayMode()решает три задачи. Она выглядит так:

int AviPlayWin::SelectInitialDisplayMode() {

GetSystemPalette();

int i, nummodes=GetNumDisplayModes();

DWORD w,h,d;

for (i=0;i

DisplayModeDescription desc;

GetDisplayModeDimensions(i, w, h, d);

if (d==8) {

desc.w=w;

desc.h=h;

desc.d=d;

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

displaymode.Add(desc);

}

}

int curdepth=GetDisplayDepth();

if (curdepth!=8) ddraw2->SetDisplayMode(640, 480, curdepth, 0, 0);

for (i=0;i

GetDisplayModeDimensions(i, w, h, d);

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

}

return 1;

}

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

Затем функция SelectInitialDisplayMode()перебирает список доступных видеорежимов и сохраняет описания 8-битных режимов в массиве displaymodes. Позднее этот массив передается диалоговому окну для вывода списка доступных видеорежимов.

Наконец, функция ищет 8-битный режим с разрешением 640x480. Этот режим выбран лишь потому, что он поддерживается абсолютным большинством видеокарт (если не всеми). После вывода диалогового окна пользователь сможет выбрать любой другой 8-битный режим.

Функция ShowDialog()

Давайте рассмотрим функцию для вывода диалогового окна. Функция ShowDialog()приведена в листинге 8.2.

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

void AviPlayWin::ShowDialog() {

const CRect& displayrect=GetDisplayRect();

if (displayrect.Width()<640 || displayrect.Height()>480) ddraw2->SetDisplayMode(640, 480, 8, 0, 0);

ClearSurface(backsurf, 0);

ClearSurface(primsurf, 0);

primsurf->SetPalette(syspal);

ddraw2->FlipToGDISurface();

ShowCursor(TRUE);

if (avidialog==0) {

avidialog=new AviDialog();

avidialog->SetArray(&displaymode);

}

if (avistream) AVIStreamRelease(avistream), avistream=0;

if (avidialog->DoModal()==IDCANCEL) {

PostMessage(WM_CLOSE);

return;

}

ShowCursor(FALSE);

fullfilename=avidialog->fullfilename;

filename=avidialog->filename;

pathname=avidialog->pathname;

int index=avidialog->GetIndex();

DWORD w,h,d;

w=displaymode[index].w;

h=displaymode[index].h;

d=displaymode[index].d;

ActivateDisplayMode(GetDisplayModeIndex(w, h, d));

LoadAvi();

CreateAviSurface();

InstallPalette();

curframe=startframe;

}

Функция ShowDialog()начинается с проверки текущего разрешения. Если в данный момент установлен видеорежим с разрешением меньше 640x480, он изменяется. Это сделано для того, чтобы диалоговое окно не выводилось в режиме Mode X. Поскольку этот режим не поддерживается Windows, такая попытка, скорее всего, закончится неудачей из-за нелинейной организации пикселей в режимах Mode X.

Возможно, у вас возник вопрос — а почему может действовать режим Mode X? Вспомните, что эта функция вызывается при каждом нажатии клавиши Escape, пробела или правой кнопки мыши во время воспроизведения видеоролика. Нельзя исключать того, что видеорежим Mode X был установлен для воспроизведения ролика, поэтому перед выводом диалогового окна необходимо проверить эту возможность.

Далее мы стираем первичную поверхность и вторичный буфер, после чего устанавливаем системную палитру. Строго говоря, стирать поверхности необязательно, но после восстановления системной палитры оставшиеся изображения будут выглядеть довольно странно.

После установки системной палитры мы вызываем функцию DirectDraw FlipToGDISurface(). Это гарантирует, что диалоговое окно Windows будет отображаться на видимой поверхности, а не во вторичном буфере. Кроме того, мы снова включаем курсор мыши (иначе пользователь не сможет нажимать кнопки диалогового окна и выбрать AVI-файл).

Если экземпляр класса AviDialogне был создан при предыдущем вызове функции ShowDialog(), мы создаем его. Обратите внимание на то, что при создании диалогового окна ему передается массив 8-битных видеорежимов, подготовленный в функции SelectInitialDisplayMode().

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

Интервал:

Закладка:

Сделать

Похожие книги на «Графика для Windows средствами DirectDraw»

Представляем Вашему вниманию похожие книги на «Графика для Windows средствами DirectDraw» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика для Windows средствами DirectDraw»

Обсуждение, отзывы о книге «Графика для Windows средствами DirectDraw» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x