DirectInputのマウス関連についての質問です。
Posted: 2008年11月16日(日) 22:57
どうもこんばんはです。
DirectInputを用いて入力関連を扱うクラスを作っているのですが、
通常のマウスカーソルと同じ座標を取得するにはどうしたら良いのでしょうか。
協調レベルがDISCL_NONEXCLUSIVE(非排他的アクセス)で表示される通常のマウスカーソルが指している座標を取得したいのです。
軸モードが相対値のまま、
始点が違っていてずれていたり、ウィンドウの端に行ってからもマウスを外側へ動かしていくと、
標準のマウスカーソルは端でとまったままなのにm_AbsPosition.x、yの値は端より外へ進み続けてしまいます。
絶対値モードにして実装すれば標準のマウスカーソルの座標と合わせる事は可能でしょうか?
それとも相対地モードで実装する方法はあるのでしょうか。
WindowsAPIの関数を使わなければならないのでしょうか。(出来る限り使用を控えたいです)
(ゲームのウィンドウの外から内へ入った時のみ、その最初の座標を取得するような使い方ならいいです)
毎度毎度文章の構成が下手ですみません。;
必要な情報が欠けていたら書きますので言ってくださいです。
どうかご教示して頂けたらありがたいです。よろしくお願いします。
DirectInputを用いて入力関連を扱うクラスを作っているのですが、
通常のマウスカーソルと同じ座標を取得するにはどうしたら良いのでしょうか。
協調レベルがDISCL_NONEXCLUSIVE(非排他的アクセス)で表示される通常のマウスカーソルが指している座標を取得したいのです。
軸モードが相対値のまま、
// 毎ループ呼ばれる状態更新用の関数です。 HRESULT CInputMouse::UpdateState() { HRESULT rc; // 添え字の切り替え(0⇔1)(ボタンを押した直後判定用に状態を現在と一つ前の二つ取得してます)(lXとか座標の状態まで二重に取得する必要は無いのでボタン用に配列つくって分けちゃったほうがよかったかも・・・) m_NowBufNo=1-m_NowBufNo; // アクセス権を取得する前に初期化 ZeroMemory(&m_MouseState[m_NowBufNo], sizeof(DIMOUSESTATE2)); // マウスのアクセス権を取得 rc = m_pMouseDevice->Acquire(); if(FAILED(rc)) { return rc; } // マウスの状態を取得 rc = m_pMouseDevice->GetDeviceState(sizeof(DIMOUSESTATE2),&m_MouseState[m_NowBufNo]); if(FAILED(rc)) { return rc; } if(m_MouseState[m_NowBufNo].lX) m_AbsPosition.x += m_MouseState[m_NowBufNo].lX; if(m_MouseState[m_NowBufNo].lY) m_AbsPosition.y += m_MouseState[m_NowBufNo].lY; if(m_MouseState[m_NowBufNo].lZ) m_AbsPosition.z += m_MouseState[m_NowBufNo].lZ; return S_OK; }以上のように実装しても、マウスの動き自体は合わせられるのですが、
始点が違っていてずれていたり、ウィンドウの端に行ってからもマウスを外側へ動かしていくと、
標準のマウスカーソルは端でとまったままなのにm_AbsPosition.x、yの値は端より外へ進み続けてしまいます。
絶対値モードにして実装すれば標準のマウスカーソルの座標と合わせる事は可能でしょうか?
それとも相対地モードで実装する方法はあるのでしょうか。
WindowsAPIの関数を使わなければならないのでしょうか。(出来る限り使用を控えたいです)
(ゲームのウィンドウの外から内へ入った時のみ、その最初の座標を取得するような使い方ならいいです)
毎度毎度文章の構成が下手ですみません。;
必要な情報が欠けていたら書きますので言ってくださいです。
どうかご教示して頂けたらありがたいです。よろしくお願いします。