- ベストアンサー
VC++ のマウス入力
visual c++のAPIでアクションゲームをつくっていてアクションはWM_TIMERに50ミリ秒に設定しておいています。マウスも使いたいのでWM_LBUTTONDOWNで左クリックが押されたフラグを立てるようにしたのですが効かない時があります。 WM_TIMERの処理の最後にフラグをfalseにするようにしています。 WM_LBUTTONDOWNの代わりにWM_TIMERでGetKeyStateでフラグをたてるとちゃんと動きます。 どうすればマウスがちゃんと効くようにできますか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- マウスでの押しっぱなし排除処理
マウスでボタンをクリックしたときに、押しっ放しを排除する処理が出来ずに困っています。 いちおう、WM_LBUTTONDOWNメッセージが来た時に、 if(!m_isKeepLeft){ m_isMouseLeft = true; } m_isKeepLeft = true; WM_LBUTTONDOWN以外のメッセージが来た時には、 m_isKeepLeft = false; m_isMouseLeft = false; として、 m_isMouseLeftが押しっ放しの時はfalseになるはずなのですが、trueになってしまいます。 どうしたらよいのでしょうか。 ちなみに、WM_LBUTTONUPの時に、m_isMouseLeftをtrueにしても上手くいきません。
- ベストアンサー
- C・C++・C#
- SetTimer関数について。
プログラム初心者です。質問させてください! 現在私はWin32APIを用いて、簡単なプログラムを作成しています。 そこで例えばイベントAが起きた10秒後にあるアクション(1)をさせたくて、 WM_イベントAの時: SetTimer(hWnd,ID_MYTIMER1, 10000, NULL); というようにプログラムを書きました。 そのSetTimer関数が実行されることより、 WM_TIMER:イベントが発生するので、WM_TIMER:イベントのところにあるアクション(1)をさせるプログラムを書きました。 しかし、イベントAが起きた100秒後には、あるアクション(1)とは違うあるアクション(2)をさせたいのですが、 この場合、WM_イベントAが起きたときに、 SetTimer(hWnd,ID_MYTIMER1, 10000, NULL); SetTimer(hWnd,ID_MYTIMER2, 100000, NULL); のようにプログラムをかいてしまうと、 二つともWM_TIMERイベントがおこるので、 あるアクション(1)も(2)も100秒後には実行されてしまいます。 100秒後にはアクション(1)はおこらず、アクション(2)だけおこる。 10秒後にはアクション(2)はおこらず、アクション(1)だけおこる。 このようにするには、どのようにすればいいのでしょうか? アドバイスよろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- クリック連打ソフトの作り方
windows APIを使い、実際にマウスを使わずにクリックしたことにできるソフトを作りたいのですが方法がわかりません。 実際にマウスでクリックした場合、WM_LBUTTONDOWN等のメッセージが発生し そのメッセージに対する処理を書けばいいことはわかるのですが、 この場合にはこの方法ではできないように思います。 WM_LBUTTONDOWN等のメッセージを任意に発生させる方法があるのか、 それともまったく別な方法なのか見当もつきません。 どのようにすれば実際にマウスを使わずにクリックしたことにできるのか教えてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- マウスの左クリックの内容を知りたい
いつもお世話になっております。 WinXP,SDKです。 WM_LBUTTONDOWN時に、別なウィンドウへ移動メッセージを出しています。 SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0); ただ、受け取り側のウィンドウでは WM_EXITSIZEMOVE時にのみ処理を行っています。 マウスを左クリックし、押したままの状態で移動した時はWM_EXITSIZEMOVEが有効ですが、マウスを左クリックしてすぐに離した時はWM_EXITSIZEMOVEメッセージは来ない為に結果がおかしくなります。 左クリック後にすぐに離した時は SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0); このメッセージは送らないようにしたいのですが、どのようなタイミングでどうチェックすれば良いでしょうか? ウィンドウの移動をさせたいので、どうしても左クリックと同時に移動メッセージは出したいのです。 でも、まったく移動されずにマウスを離された時に困ります。 WM_MOSEMOVE時にMK_LBUTTONをチェックして処理をしてみましたが結果は一緒でした。 移動開始の左クリックなのか、シングルクリックなのかが分かればいいような気がするのですが、それもどのように知ることが出来るか分かりません。 アドバイスをお願い致します。
- ベストアンサー
- C・C++・C#
- マウスの動き
どなたか答えてください。 WM_LBUTTONDOWNにて、 マウスの位置がウィンドウの右端だった場合、 サイズ変更が出来るようにしたいのです。 ですので処理に、 SetCursor(LoadCursor(NULL, IDC_SIZEWE)); SendMessage(hWnd,WM_SYSCOMMAND,SC_SIZE | WMSZ_LEFT,0); を入れサイズ変更が出来るようにしました。 ですがそのときマウスが上下に動くのが動くのが気になります(マウスカーソルがウィンドウの外に出ることもあるので)。 それを解消したいのですがどのようにしたらいいかわかりません。 どなたかいい方法を知らないでしょうか?
- 締切済み
- C・C++・C#
- VC++でカーソルを固定する
VC++のver6.0を使用している者です. 今回「カーソルがウィンドウの中心に固定されていて,左ボタンをクリックすると自由に動かすことができ,もう一度クリックするとカーソルは初期位置に戻り,再び固定されて動かすことが出来ない」というアプリを作成しようと思っています. コンセプトとして, ・ウィンドウズメッセージハンドラのWM_LBUTTONDOWNを用いる ・BOOL型の変数を用意し,左ボタンが押される度に真偽を入れ替える ・TRUEの状態ならば自由にカーソルを動かせる ・FALSEの状態だとウィンドウの中心に固定される(マウスを動かしてもカーソルは動かない) という感じにしたいと考えています. しかし,カーソルを固定,およびその解除の方法が分かりません.どのようにやればよいのでしょうか…よい方法がありましたら,ご教授ください. よろしくお願いします.
- ベストアンサー
- C・C++・C#
- WM_NCHITTESTの流れ
マウスの動きをキャッチする ↓ myProc(hWnd, WM_NCHITTEST, なし, 座標)に送られる ↓ myProc内で処理されなく、最後のreturn DefWindowProc(hWnd, WM_NCHITTEST, なし, 座標)が返される ↓ すると戻り値はLRESULT型で、その内容はHTCAPTIONやHTCLIENTである ↓ ここで問題、このHTなんとかという戻り値って、次はどこにもってかれて、どういう処理をされてWM_LBUTTONDOWNとかのメッセージになるんですか? HTなんとかの戻り値には、座標が含まれていないのに、どうやってWM_LBUTTONDOWNと座標とのメッセージに繋げられるんでしょう。
- 締切済み
- C・C++・C#
- マウスのクリックを無視したい
Visual C++ 2005、Windows APIを使ってアプリケーションを作成しています。 とあるファイルの処理に10数秒程度かかるため、この間はプログレスバー付きのダイアログを表示し、マウスカーソルも砂時計に変えています。 この処理の間にもしユーザーがメインウインドウのボタンなどをクリックした場合、クリックした瞬間は何も起こりませんが、処理が終わってプログレスバーが消えた途端にそのクリックに反応してしまいます。どうやらファイル処理中でも、マウスの挙動は記録されているようです。(メッセージキューに溜まってるのでしょうか?) 処理中のマウスのクリック情報は一切無視したい(破棄したい)のですが、どのような手段があるでしょうか?
- 締切済み
- C・C++・C#
- DXライブラリについて(ゲームプログラミング)
今までVisualC++.netでWinAPIを使ってアクションゲームを 作っていたのですが、最近DXライブラリを使い出しました。 今までは一定時間ごとにメインループとは別に自動的に行われる 処理はウィンドウプロシージャでSetTimerして case WM_TIMER:に処理を書くことで実現していたのですが、 DXライブラリの場合それにあたる機能はあるのでしょうか。 たとえばメインループとは別に1秒おきにある変数をTRUEにしたり FALSEにしたりしたい場合、ウィンドウプロシージャでやるしかないのでしょうか?
- ベストアンサー
- C・C++・C#
- STATICコントロール
質問があります。 CreateWindowで作ったSTATICコントロールなのですが サブクラス化をして処理をしようと思っていたのですがWM_LBUTTONDOWN、その他マウスイベントメッセージが返ってきません。 これは仕様なのでしょうか? 環境はBorlandです。
- ベストアンサー
- C・C++・C#
- レーベル印刷をしようとすると「記録ディスク詰まり 後ろ」の表示が出て、レーベルが作成できない状況です。
- お使いの環境はWindows11であり、接続はUSBケーブルで行われています。
- ひかり回線を使用しています。
お礼
ありがとうございました。