次の方法で共有


CustomUI サンプル

このサンプルは、DXUT によって実装された UI サブシステムの簡単な実例を示しています。DXUT は、ほとんどの Direct3D アプリケーションで見られる一般的なコードとインフラストラクチャを提供します。DXUT には、ユーザー インターフェイスをサポートするための領域があります。DXUT には、ボタンやチェック ボックスなどの一般的に使用されるコントロール オブジェクトが含まれています。ウィンドウ表示モードおよび全画面モードのどちらでも Direct3D アプリケーションはそれらのユーザー インターフェイスを実装して使用できます。

Bb204884.CustomUI(ja-jp,VS.85).jpg

Path

ソース : (SDK ルート)\Samples\C++\Direct3D\CustomUI
実行可能ファイル : (SDK ルート)\Samples\C++\Direct3D\Bin\x86 or x64\CustomUI.exe

サンプルが動作するしくみ

このサンプルは、アプリケーションが DXUT を使用してフレームワークのユーザー インターフェイス サポートの利点を活用する方法を示しています。DXUT は次の種類のコントロールをサポートしています。

コントロールの種類 これを実装するクラス
スタティック CDXUTStatic
ボタン CDXUTButton
ラジオ ボタン CDXUTRadioButton
チェック ボックス CDXUTCheckBox
コンボ ボックス CDXUTComboBox
スライダー CDXUTSlider
編集ボックス CDXUTEditBox
IME 機能を持つ編集ボックス CDXUTIMEEditBox

すべての DXUT コントロールは、Windows コントロールと同じように動作します。これらは、まったくゼロの状態から実装されており、HWND または Windows コントロールは使用していません。また、これらは Direct3D でレンダリングされています。そのため、ウィンドウ表示モードおよび全画面表示のどちらでも Direct3D アプリケーションを使用できます。

CDXUTIMEEditBox は、IME (Input Method Editor) 機能を持つ編集ボックスです。CDXUTIMEEditBox にテキストを入力する場合、ユーザーはサポートされている東アジア言語 (日本語、韓国語、簡体字中国語、繁体字中国語) の 1 つに入力言語を切り替えることができます。入力時に、CDXUTIMEEditBox は IME ウィンドウを Direct3D でレンダリングします。また、これはデフォルトの IME ウィンドウ表示モードを使用しないので、全画面モードでアプリケーション ウィンドウが適切に表示されます。

このサンプルは、g_HUD および g_SampleUI の 2 つの CDXUTDialog オブジェクトを定義することで 開始します。CDXUTDialog は、1 つまたは複数のコントロールをカプセル化するコンテナーとして提供されます。これはアプリケーションとコントロールの間にあります。そのため、アプリケーションは CDXUTDialog を呼び出してメッセージを渡し、レンダリングします。CDXUTDialog は、すべてのコントロールが確実にメッセージを受け取り、適切にレンダリングされるようにします。コントロールはそれ自体が、単独ではなく CDXUTDialog と一緒に使用されるように設計されています。アプリケーションは、1 つの CDXUTDialog オブジェクトに制限されません。このサンプルで実行されているように、一度に複数を使用することができます。

まず、SetCallback メソッドでイベント コールバック関数が設定される CDXUTDialog オブジェクトを初期化する必要があります。UI コントロールを持つユーザー インターフェイスとして、コントロールはサンプルに重要なイベントに関して通知し、それに応じて返答されます。この時、サンプルは必要とされる追加のフォントを初期化します。これは、SetFont メソッドで実行されます。

次に、サンプルは必要とされるコントロールを作成する必要があります。これは、AddButton などの CDXUTDialog の AddXXX メソッドを呼び出すことで実行されます。サンプルでは、g_HUD に Direct3D サンプルが備えている一般的な機能である 4 つのボタン、ホワイトペーパーの表示、全画面モードとウィンドウ モードの切り替え、HAL と REF の切り替え、3D デバイス設定の変更が含まれています。g_SampleUI には、サンプル固有の残りのすべてのコントロールが含まれます。コントロールが追加された後、その外観は変更されます。スタティック コントロールおよびコンボ ボックス、IME 機能の編集ボックスの外観が変更された様子は、サンプルのとおりです。

次に、OnResetDevice で、CDXUTDialog やコントロールの SetSize や SetLocation メソッドが呼び出されます。これは、ユーザーがアプリケーション ウィンドウのサイズを変更するときに、複数のダイアログとコントロールのサイズ変更と位置調整が必要になるためです。アプリケーション ウィンドウに対する CDXUTDialog の位置、これが属す CDXUTDialog に対するコントロールの位置が重要になります。

ユーザー インターフェイスをレンダリングするには、OnFrameRender 関数にある 2 つの CDXUTDialog オブジェクトの OnRender メソッドを呼び出します。CDXUTDialog は、それが含むコントロールを適切な順番でレンダリングします。

最後の手順では、UI にコントロールにメッセージを渡すようにする必要があります。これによって、これらはユーザーからキーボードとマウスのイベントを受け取ります。MsgProc では、サンプルは CDXUTDialog の MsgProc メソッドを呼び出し、メッセージを渡します。CDXUTDialog の MsgProc が、メッセージが処理済みであることを示す TRUE を返す場合、サンプルは *pbNoFurtherProcessing を TRUE に設定し、すぐに返すことが重要です。これに失敗するとメッセージは 2 回以上処理されてしまいます。また、これによってダブル ウィンドウなどの特定の Input Method Editor (IME) メッセージに対して望ましくない動作が発生することがあります。

イベント コールバック

チェック ボックスのオン/オフを切り替える、新しい項目をコンボ ボックスで選択する、ラジオ ボタン グループで新しい項目を選択するなどの特定のイベントが、ユーザーと UI コントロールの間で発生します。アプリケーションはこれらのイベントに関係しているため、CDXUTDialog イベント コールバック メカニズムでこれらが通知されます。サンプルでは、コールバック関数である OnGUIEvent は、CDXUTDialog::SetCallback メソッドへのパラメーターとして定義され、渡されます。その結果、この関数はユーザーが UI コントロールに関連する動作を行った場合は常に呼び出されます。コールバックが発生する動作は次のとおりです。

  • ボタンをクリックする (CDXUTButton)
  • コンボ ボックスで新しい項目を選択する (CDXUTComboBox)
  • ラジオ ボタン グループで新しい項目を選択する (CDXUTRadioButton)
  • チェック ボックスのチェック ステートを変更する (CDXUTCheckBox)
  • スライダーの値を変更する (CDXUTSlider)
  • 編集ボックスで Enter キーを押す (CDXUTEditBox および CDXUTIMEEditBox)
  • コールバックでは、イベントの種類、イベントを発生させるコントロールの ID、コントロール オブジェクトがアプリケーションに対して利用できます。サンプルでは、発生するコントロールの内容を取得し、それを画面に表示することでコールバックに返答します。

参考情報

詳細については、技術関連記事の「IME のインストールと使用」および「ゲームでの IME の使用」を参照してください。