Microsoft DirectX 8.0 (C++)

サンプル関数 1 : DI_Init

このアプリケーション定義サンプル関数は、Microsoft® DirectInput® オブジェクトを作成して初期化し、必要なインターフェイス ポインタを取得して、それらのポインタをグローバル変数に割り当てる。初期化が完了したら、デバイスを取得する。

初期化のどの部分で失敗しても、この関数は、DI_Term アプリケーション定義サンプル関数を呼び出し、プログラムを終了する準備として、DirectInput オブジェクトとインターフェイス ポインタの割り当てを解除する (「サンプル関数 2 : DI_Term」を参照すること。

DI_Init 関数は、DirectInput オブジェクトを作成することに加えて、以下のチュートリアル手順で説明されているタスクを実行する。

以下は、DI_Init 関数を示している。

/ * 次の変数は初期化済みと見なされる。
HINSTANCE             g_hinst;    // アプリケーション インスタンス。
HWND                  g_hwndMain; // アプリケーション ウィンドウ。
*/
 
LPDIRECTINPUT8        g_lpDI; 
LPDIRECTINPUTDEVICE8  g_lpDIDevice; 
 
BOOL WINAPI DI_Init() 
{ 
    HRESULT hr; 
 
    // DirectInput オブジェクトを作成する。 
    hr = DirectInput8Create(g_hinst, DIRECTINPUT_VERSION, 
                            IID_IDirectInput8, (void**)&g_lpDI, NULL); 
 
    if FAILED(hr) return FALSE; 
 
    // IDirectInputDevice8 インターフェイスへのポインタを取得する。
    hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL); 
 
    if FAILED(hr) 
    { 
        DI_Term(); 
        return FALSE; 
    } 
 
    // IDirectInputDevice8 インターフェイスを保持して、
    // 使用準備が整ったところである。 
 
    // キーボード用 DirectInput オブジェクトが作る、事前定義された
    // キーボード データ形式を用いて、データ形式を設定する。 
    
    hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard); 
 
    if FAILED(hr) 
    { 
        DI_Term(); 
        return FALSE; 
    } 
 
    // 協調レベルを設定する。
    hr = g_lpDIDevice->SetCooperativeLevel(g_hwndMain, 
                             DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); 
    if FAILED(hr) 
    { 
        DI_Term(); 
        return FALSE; 
    } 
 
    // 入力デバイスにアクセスする。 
    hr = g_lpDIDevice->Acquire(); 
    if FAILED(hr) 
    { 
        DI_Term(); 
        return FALSE; 
    } 
 
    return TRUE; 
}