- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マウスでの押しっぱなし排除処理)
マウスでの押しっぱなし排除処理
このQ&Aのポイント
- マウスでボタンをクリックしたときに、押しっ放しを排除する処理が出来ずに困っています。
- WM_LBUTTONDOWN以外のメッセージが来た時に、m_isKeepLeftとm_isMouseLeftをリセットしていますが、m_isMouseLeftが押しっ放しの時に意図した動作をしない問題があります。
- また、WM_LBUTTONUPの時にm_isMouseLeftをtrueにしても上手くいきません。どう解決すれば良いでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
アプリがPeekMessageのデッドタイムを使うのはほんとはよくないことだとおもう。CPU資源使い切るし。 適当にSleepを入れることで対処するるといいとおもいます。 ゲームとかは反応性を上げるためにデッドタイムをバリバリ使っているので、衝突したんだと思う。
その他の回答 (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;
質問者
補足
ありがとうございます。 メッセージが無い時に、ゲームを起動させているのですが、PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)とすると、常にメッセージを受信してしまい、ゲームが起動できなくなっていまいました。 どうすればよいでしょうか。
お礼
ありがとうございます。 m_isMouseLeftをチェックしている所で、m_isMouseLeftが真だった時に、直接フラグをfalseにすることで解決できました。 この度はご回答頂きありがとうございました。