Шаг 193 - Попробуем DirectDraw

Мы сейчас просто посмотрим как можно инициализировать режимы DirectDraw для работы. DirectDraw - это часть DirectX.

DirectX API
	DirectDraw - прямой доступ к видеопамяти 
	DirectSound - прямой доступ к звуковой карте 
	DirectPlay - прямой доступ к сетевым возможностям 
		для обеспечения multiplayer mode 
	DirectInput - поддержка игровых устройств ввода 

DirectDraw обеспечивает прямой доступ к видеопамяти. Реализован DirectDraw в виде COM объектов.

Давайте создадим простое приложение с помощью AppWizard, как SDI с именем допустим TestDraw. Задача простая по выбору пункта меню инициализировать DirectDraw. Поэтому создайте пункт меню DirectDraw скажем в View и свяжите этот пункт меню с функцией

void CMainFrame::OnViewDirectdraw() 
{
	// TODO: Add your command handler code here
	
}

Итак, пора инициализировать. Для начала надо подключить заголовочный файл с описаниями функций

......
#include "TestDraw.h"

#include "MainFrm.h"
#include "ddraw.h"
......

Вот теперь нам нужно получить указатель на основной объект DirectDraw давайте это сделаем.

void CMainFrame::OnViewDirectdraw() 
{
LPDIRECTDRAW lpDD; 
HRESULT hdr;
hdr = DirectDrawCreate( NULL, &lpDD, NULL );
if( hdr != DD_OK )
{    
 AfxMessageBox("Not Direct Create");
}
}

Мы создаем объект DirectDrawCreate. Но вот если сейчас скомпилировать то вы получите ошибку сборки. Конечно нужен LIB файл !!!. Нужно так нужно, как говорится в одной из реклам. Вот он ddraw.lib, вы должны поместить его в Project Setting.

Теперь мы можем включить режим доступа к монитору

hdr = lpDD->SetCooperativeLevel( m_hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
if( hdr != DD_OK )
{
	AfxMessageBox("SetCooperativeLevel");
}

Ну теперь пора установить режим вывода на экран.

hdr = lpDD->SetDisplayMode( 800, 600, 8);
if( hdr != DD_OK )
{
	AfxMessageBox("Error SetDisplayMode");
}

При этом происходит физическое переключение, как я понимаю. Мой монитор гаснет, шелкает, и переходит в данный режим. Кстати если Вы обратили внимание, то я установил эксклюзивный режим и поэтому можно работать только с этой программой.

Конечно я понимаю, что это мало рассказанно про DirectDraw. Просто его инициализация и о данной теме стоит рассказывать отдельно.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 23.05.2000