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


Инициализация DirectInput



Инициализация DirectInput и DirectDraw выполняется в функции OnCreate(). DirectInput инициализируется версией OnCreate() класса QwertyWin, а DirectDraw — версией из DirectDrawWin. Функция QwertyWin::OnCreate() приведена в листинге 6.2.

Листинг 6.2. Функция QwertyWin::OnCreate()


int QwertyWin::OnCreate(LPCREATESTRUCT lpCreateStruct) { HRESULT r=DirectInputCreate( AfxGetInstanceHandle(), DIRECTINPUT_VERSION, &dinput, 0 ); if (r!=DI_OK) { AfxMessageBox("DirectInputCreate() failed"); return -1; }

r = dinput->CreateDevice( GUID_SysKeyboard, &keyboard, 0 ); if (r!=DI_OK) { AfxMessageBox("CreateDevice(keyboard) failed"); return -1; }

r = keyboard->SetDataFormat( &c_dfDIKeyboard ); if (r!=DI_OK) { AfxMessageBox("keyboard->SetDataFormat() failed"); return -1; } r=keyboard->SetCooperativeLevel( GetSafeHwnd(), DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); if (r!=DI_OK) { AfxMessageBox("keyboard->SetCooperativeLevel() failed"); return -1; } if (DirectDrawWin::OnCreate(lpCreateStruct)==-1) return -1;

return 0; }


Прежде всего обратите внимание — версия OnCreate() базового класса вызывается лишь в конце функции. Это сделано для того, чтобы при неудачной инициализации DirectInput программа выводила окно сообщения и прекращала работу без инициализации DirectDraw.

Сначала функция OnCreate() инициализирует указатель dinput с помощью функции DirectInputCreate(), которой необходимо передать четыре аргумента. Вызов этой функции выглядит так:


HRESULT r=DirectInputCreate( AfxGetInstanceHandle(), DIRECTINPUT_VERSION, &dinput, 0 );


Первый аргумент - логический номер экземпляра приложения, получаемый функцией AfxGetInstanceHandle(). Второй аргумент — номер версии DirectInput. В нашем случае используется константа DIRECTINPUT_VERSION, она определяется DirectInput в зависимости от версии SDK, использованной для компиляции приложения. Различные версии DirectInput более подробно рассматриваются в этой главе ниже.


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