Вход/Регистрация
Графика для 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<nummodes;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<nummodes;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;

  • Читать дальше
  • 1
  • ...
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: