次の方法で共有


チュートリアル 1 のサンプル

チュートリアル 1 のサンプル

サンプル関数 1 :DI_Init

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

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

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

次に、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++ チュートリアル」を参照すること。