Функция SetDisplayMode()
Существуют две версии функции SetDisplayMode(). Первая из них принадлежит интерфейсу DirectDraw и вызывается с тремя аргументами. Вторая версия принадлежит интерфейсу DirectDraw2 и вызывается с пятью аргументами. Прототип первой функции выглядит так:
HRESULT SetDisplayMode( DWORD width, DWORD height, DWORD depth ); |
СОВЕТ
Для любознательных читателей
Заглянув в заголовочный файл DirectDraw (ddraw.h), вы не найдете в нем этого прототипа. Это объясняется тем, что все функции DirectDraw описываются на IDL (языке определения интерфейсов) спецификации COM. На IDL функция SetDisplayMode() выглядит так:
STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD, DWORD) PURE; |
Для наших целей IDL не нужен. Все, что нам необходимо знать, - имя функции, тип возвращаемого значения, а также количество и типы аргументов. Все эти сведения более четко описываются традиционными прототипами функций, которые и приводятся в книге и справочных файлах DirectX.
Функция SetDisplayMode(), как и большинство функций DirectX API, возвращает значение типа HRESULT - 32-разрядную величину с описанием результата вызова функции. Ее значение DD_OK показывает, что вызов оказался успешным.
Версия SetDisplayMode() из интерфейса DirectDraw получает три аргумента типа DWORD. Эти аргументы определяют разрешение экрана и глубину пикселей нужного видеорежима, поэтому стандартный видеорежим VGA 640x480x8 активизируется так:
ddraw1->SetDisplayMode( 640, 480, 8 ); |
Выглядит довольно просто, поэтому давайте перейдем к версии SetDisplayMode() из интерфейса DirectDraw2. Ее традиционный прототип выглядит так:
HRESULT SetDisplayMode( DWORD width, DWORD height, DWORD depth, DWORD refreshrate, DWORD flags ); |
В этой версии появляются два дополнительных аргумента: частота смены кадров и двойное слово, которое может быть использовано в будущих версиях DirectDraw, а пока должно быть равно нулю. В расширенной версии SetDisplayMode() стандартный видеорежим VGA 640x480x8 можно активизировать так:
ddraw1->SetDisplayMode( 640, 480, 8, 0, 0 ); |
данном случае вместо частоты смены кадров передается 0; это означает, что должна быть использована частота, принятая по умолчанию. Кроме того, можно указать конкретное значение частоты (60 Гц в следующем примере):
ddraw1->SetDisplayMode( 640, 480, 8, 60, 0 ); |
Однако не следует думать, что вы можете задать любую частоту (или другие параметры видеорежима). Перед тем как вызывать SetDisplayMode(), необходимо сначала определить параметры и частоты допустимых видеорежимов.