Microsoft DirectX 8.0 (C++)

ステップ 5 : アクション マップの表示

アクション マッピングには、開発者が特定のコントローラ ハードウェアに依存せずにゲーム アクションを定義できるという利点のほか、ユーザーによる再構成を容易にするユーザー インターフェイス (UI) が提供される利点もある。

UI は、テキストのみとグラフィックスの 2 つの形式で表示できる。また、これら 2 つのオプションを表示専用モードまたは編集モードで表示できる。

UI を表示するには、事前にいくつかの設定が必要となる。まず、DICOLORSET 構造体が宣言され、初期化される。この構造体は、その名前が示すように、UI の表示に使用するカラー セットを記述する。次のコードは、この構造体の設定を示している。

    DICOLORSET dics;
    ZeroMemory(&dics, sizeof(DICOLORSET));
    dics.dwSize = sizeof(DICOLORSET);

ZeroMemory 関数を使ってメモリ ブロックをゼロに設定すると、デフォルトのカラー スキーマを使用することを示す。これ以外には、初期化を必要とする要素は dwSize メンバのみであり、これは DICOLORSET 構造体のサイズに設定する。

DICOLORSET 構造体は、このコードに示すように、より大きな DICONFIGUREDEVICESPARAMS 構造体の一部として含まれる。

    DICONFIGUREDEVICESPARAMS dicdp;
    ZeroMemory(&dicdp, sizeof(dicdp));
    dicdp.dwSize = sizeof(dicdp);
    dicdp.dwcUsers       = 1;
    dicdp.lptszUserNames = m_strUserName;
    
    dicdp.dwcFormats     = 1;
    dicdp.lprgFormats    = &m_diaf;
    dicdp.hwnd           = m_hWnd;
    dicdp.lpUnkDDSTarget = NULL;

DICONFIGUREDEVICESPARAMS 構造体が宣言され、この構造体に割り当てられたメモリにゼロだけを格納するよう設定される。ここでも、dwSize メンバには構造体のサイズが設定される。この例では現在ログされているユーザーだけが使用されるため、dwcUsers は1 に設定される。変数 m_strUserName は NULL に設定されているため、ユーザー名は現在システムにログオンしているユーザーの名前になる。

アクション マップを格納する 1 つの DIACTIONFORMAT 構造体だけが渡されるため、dwcFormats は 1 に設定され、DIACTIONFORMAT 構造体のアドレスが lprgFormats として渡される。

変数 hwnd にはアプリケーション ウィンドウのハンドルを割り当て、lpUnkDDSTarget は NULL に設定して Microsoft® Windows® Graphics Device Interface (GDI) 関数を使って構成ユーザー インターフェイスのイメージを描画することを示す。

初期化された DICONFIGUREDEVICESPARAMS 構造体は、次のコードに示すように、IDirectInput8::ConfigureDevices に渡される。

    hr = m_pDI->ConfigureDevices(NULL, &dicdp, dwFlags, NULL);

最初と最後のパラメータはオプションのコールバック関数と共に使用するが、このサンプルでは使用しないため NULL が設定されている。

第 2 パラメータは、表示されるデータやその他補助情報を格納する DICONFIGUREDEVICESPARAMS 構造体のアドレスである。

第 3 パラメータは、表示が読み出し専用モードか編集モードかを決定するフラグに使用される。構成を、変更できない参照目的として表示する場合は、このパラメータに DICD_DEFAULT フラグを使用する。ただしこの例では、変数 dwFlags には既に DICD_EDIT が設定されているため、ユーザー構成が可能である。これについては、「ステップ 6 : アクション マップのユーザー構成」で説明する。