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


Функция 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 был установлен для воспроизведения ролика, поэтому перед выводом диалогового окна необходимо проверить эту возможность.

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



Начало  Назад  Вперед



Книжный магазин