8633


C++でゲーム開発を行っております。  
マウスカーソルをウィンドウから出さないためにはどのような処理をすればよろしいでしょうか。

例えば Teeworlds や Steam 内の多数のゲームで実装されています。

ゲーム内ではマウスカーソルは別の画像を用いているのでマウスカーソルを消すことは可能です。

マウスカーソルがウィンドウ外に出ている場合 `SetCursorPos` で内に戻す処理を行っても  
やはり 60FPS なので多少出てしまいます。  
マウスカーソルを消して、常にアクティブ状態にすれば見かけ上可能ですが、  
その場合は

  1. 現在 `ShowCursor` によりカーソルを非表示にしておりますが、自 window 外でも消去する方法。
  2. 常にアクティブ状態に保つ方法が分かりません。( `WM_ACTIVATE` 時に `SetForegroundWindow` や 60FPS で`SetForegroundWindow` を行いましたが少しちらつきます)

カーソルを 60FPS
で画面中央に固定し、各フレーム毎に変位を求め、別でマウスカーソルの位置を処理する方法だとまあまあ上手くいきますが、1フレームで画面外まで移動されるとやはり同じこととなってしまいます。

60FPS が遅いなら別スレッドで処理すれば良いのですが、Windows がマウスを処理するクロックサイクル以下にはできないかと思います。

ですので、できれば他の方法で行いたいと考えております。

環境は C++ で行っており、DxLib を使用しておりますが、Window メッセージは処理できる形になっております。


CC BY-SA 3.0
2015-03-31T15:59:53.733
8621
2015-04-01T04:00:00.520
2015-03-31T16:20:43.847
7926
9095
question
c++ directx winapi
ウィンドウ内にマウスカーソルを維持


Win32SDKの関数、[ClipCursor()](https://msdn.microsoft.com/en-
us/library/windows/desktop/ms648383.aspx)ですかね。


CC BY-SA 3.0
2015-04-01T02:27:45.397
8633
2015-04-01T04:00:00.520
2020-06-17T08:14:45.997
-1
3793
8621
answer