チュートリアル 1 のサンプル
チュートリアル 1 のサンプル
サンプル関数 1 :DI_Init
このアプリケーション定義サンプル関数は、Microsoft® DirectInput® オブジェクトを作成して初期化し、必要なインターフェイス ポインタを取得して、それらのポインタをグローバル変数に割り当てる。初期化が完了したら、デバイスを取得する。
この関数は、初期化のどの部分で失敗しても DI_Term アプリケーション定義サンプル関数を呼び出し、プログラムを終了する準備として、DirectInput オブジェクトとインターフェイス ポインタの割り当てを解除する。詳細については、「サンプル関数 2 :DI_Term」を参照すること。
DI_Init 関数は、DirectInput オブジェクトを作成することに加えて、以下のチュートリアル手順で説明されているタスクを実行する。
- ステップ 2 :DirectInput キーボード デバイスの作成
- ステップ 3 :キーボードのデータ形式の設定
- ステップ 4 :キーボードの動作の設定
- ステップ 5 :キーボードへのアクセス権の取得
次に、DI_Init 関数を示す。
/* The following variables are presumed to be initialized:
HINSTANCE g_hinst; // application instance
HWND g_hwndMain; // application window
*/
LPDIRECTINPUT8 g_lpDI;
LPDIRECTINPUTDEVICE8 g_lpDIDevice;
BOOL WINAPI DI_Init()
{
HRESULT hr;
// Create the DirectInput object.
hr = DirectInput8Create(g_hinst, DIRECTINPUT_VERSION,
IID_IDirectInput8, (void**)&g_lpDI, NULL);
if FAILED(hr) return FALSE;
// Retrieve a pointer to an IDirectInputDevice8 interface
hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL);
if FAILED(hr)
{
DI_Term();
return FALSE;
}
// Now that you have an IDirectInputDevice8 interface, get
// it ready to use.
// Set the data format using the predefined keyboard data
// format provided by the DirectInput object for keyboards.
hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard);
if FAILED(hr)
{
DI_Term();
return FALSE;
}
// Set the cooperative level
hr = g_lpDIDevice->SetCooperativeLevel(g_hwndMain,
DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
if FAILED(hr)
{
DI_Term();
return FALSE;
}
// Get access to the input device.
hr = g_lpDIDevice->Acquire();
if FAILED(hr)
{
DI_Term();
return FALSE;
}
return TRUE;
}
サンプル関数 2 :DI_Term
このアプリケーション定義サンプル関数は、プログラムを終了する準備として、またはデバイスの正常な初期化が失敗した場合の処理として、既存の DirectInput インターフェイス ポインタの割り当てを解除する。
/* The following variables are presumed initialized:
LPDIRECTINPUT8 g_lpDI;
LPDIRECTINPUTDEVICE8 g_lpDIDevice;
*/
void WINAPI DI_Term()
{
if (g_lpDI)
{
if (g_lpDIDevice)
{
// Always unacquire device before calling Release().
g_lpDIDevice->Unacquire();
g_lpDIDevice->Release();
g_lpDIDevice = NULL;
}
g_lpDI->Release();
g_lpDI = NULL;
}
}
その他の DirectInput チュートリアルについては、「DirectInput C/C++ チュートリアル」を参照すること。