• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マウスでの押しっぱなし排除処理)

マウスでの押しっぱなし排除処理

このQ&Aのポイント
  • マウスでボタンをクリックしたときに、押しっ放しを排除する処理が出来ずに困っています。
  • WM_LBUTTONDOWN以外のメッセージが来た時に、m_isKeepLeftとm_isMouseLeftをリセットしていますが、m_isMouseLeftが押しっ放しの時に意図した動作をしない問題があります。
  • また、WM_LBUTTONUPの時にm_isMouseLeftをtrueにしても上手くいきません。どう解決すれば良いでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • saitoha
  • ベストアンサー率81% (9/11)
回答No.2

アプリがPeekMessageのデッドタイムを使うのはほんとはよくないことだとおもう。CPU資源使い切るし。 適当にSleepを入れることで対処するるといいとおもいます。 ゲームとかは反応性を上げるためにデッドタイムをバリバリ使っているので、衝突したんだと思う。

tomonori7
質問者

お礼

ありがとうございます。 m_isMouseLeftをチェックしている所で、m_isMouseLeftが真だった時に、直接フラグをfalseにすることで解決できました。 この度はご回答頂きありがとうございました。

その他の回答 (1)

  • saitoha
  • ベストアンサー率81% (9/11)
回答No.1

メッセージループをこんなふうに MSG msg; while(TRUE) { if(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if(!::GetMessage(&msg, NULL, 0, 0)) break; ::TranslateMessage(&msg); ::DispatchMessage(&msg); } else { /* m_isMouseLeft = false にする処理 */ } } return msg.wParam;

tomonori7
質問者

補足

ありがとうございます。 メッセージが無い時に、ゲームを起動させているのですが、PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)とすると、常にメッセージを受信してしまい、ゲームが起動できなくなっていまいました。 どうすればよいでしょうか。