Мы сейчас просто посмотрим как можно инициализировать режимы 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. Просто его инициализация и о данной теме стоит рассказывать отдельно.