COM
ATL版DirectXでマウス情報を取得する
(2009. 7. 25)
前章までATLコントロールとしてDirectXを動かす事ができました。続いてATLコントロール上でマウスをクリック/ドラックした情報を伝えてみようと思います。
○ Visual Studioの機能を使って楽々と
自前でガリガリと書くのもありですが、ここはVisual Studioの機能を最大限に使ってみます。まず、クラスビューを開き、コントロールのクラス(CDXWindow)の上で右クリックをして[プロパティ]を選択します。するとプロパティウィンドウが開きます:
ここでアイコンの中のをクリックします。するとウィンドウメッセージ一覧が表示されます:
ここからWM_LBUTTONDOWNを探し、右側の空間をクリックすると[<追加>LButtonDown]というポップアップが出ますので、それをクリックします。すると、CDXWindowに左クリックのメッセージハンドラメソッドが自動的に追加されます。今回はここにメッセージボックスを表示するコードを追加してみました:
CDXWindow.cpp LRESULT CDXWindow::OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。
::MessageBox( NULL, "左クリック!", _T(""), 0 );
return 0;
}
引数の意味は通常のWindowsのWM_LBUTTONDWONを受けるOnLButtonDownハンドラと一緒です。これでコンパイルすると左クリックを検知するATLコントロールが出来上がります。
○ VBに貼り付けてテスト
早速テスト。VBに自作ATLコントロールを貼り付けて、左クリック!
出ました!ということは、上の作業を繰り返す事で、このATLに飛んでくるウィンドウメッセージをどんどん取得できることになります。例えばドラッグ情報を捕まえてオブジェクトをくるくると回して見せたりもできますね。また上のビュー上にあるモデルを摘むとか、右クリックを検知してメニューを出すとか、そういうWindowsアプリっぽい事もできるわけです。現実的な所では、ブラウザ上にマウスで動かせるサンプルを置けるかもしれません。
マウスの動きに対応したカメラのような動作はできそうなので、次回はちょっと別の事。VB上で動かす事を前提として、ファイルメニューで選択したXファイルを読み込んで表示するATLコントロールを作ってみようかな。