- ベストアンサー
VC++でカーソルを固定する
VC++のver6.0を使用している者です. 今回「カーソルがウィンドウの中心に固定されていて,左ボタンをクリックすると自由に動かすことができ,もう一度クリックするとカーソルは初期位置に戻り,再び固定されて動かすことが出来ない」というアプリを作成しようと思っています. コンセプトとして, ・ウィンドウズメッセージハンドラのWM_LBUTTONDOWNを用いる ・BOOL型の変数を用意し,左ボタンが押される度に真偽を入れ替える ・TRUEの状態ならば自由にカーソルを動かせる ・FALSEの状態だとウィンドウの中心に固定される(マウスを動かしてもカーソルは動かない) という感じにしたいと考えています. しかし,カーソルを固定,およびその解除の方法が分かりません.どのようにやればよいのでしょうか…よい方法がありましたら,ご教授ください. よろしくお願いします.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> カーソルはマウスカーソルを使おうと思ってます. 不具合があったり、使い方を知らない人が使うと終了の操作が出来なかったり、問題が多いですが…。 ジョークソフトなんかで作った記憶はあります。 その場合は、カーソルの描画はWindowsがやってくれますので、特別な処理は不要です。 マウスが移動したOnMouseMoveのイベント時、固定するモードだったら、::SetCursorPosで位置を固定して、CWnd::OnMouseMoveのオーバーライドを行わせないとかで良かったかと。
その他の回答 (2)
- taranrappu
- ベストアンサー率64% (16/25)
Win32APIの ClipCursorも参考までに。 カーソルの移動範囲を指定矩形内に限定させます。 お手軽ですよ。
お礼
回答ありがとうございます. そうですね,調べてみたらClipCursorは使いやすそうでした. ぜひ挑戦してみたいと思います.
- neKo_deux
- ベストアンサー率44% (5541/12319)
> カーソルを固定,およびその解除の方法が分かりません. 固定するカーソルと言うのは、Windowsの操作にも使用するマウスカーソルですか?アプリケーション独自のカーソル? 後者だとして、OnPaintなどで、基本的に常にカーソルの位置は常に描画します。 固定、解除に関しては、描画するXY位置を変更します。 TRUEの状態になった瞬間に、現在のマウスカーソルの位置を取得しておきます。マウスが動くたびに元の位置からの変化量を計算し、XYに格納。再描画。 FALSEの際には、XYには中心の位置を格納。 とかかなあ。
お礼
回答ありがとうございます. OnPaint関数を用いる方法は参考になりました. ただ…申し訳ないのですが,カーソルはマウスカーソルを使おうと思ってます.「カーソルの位置のをx,y座標で予め指定→固定」の流れでいきたいのですが,マウスカーソルだとしんどいでしょうか。いろいろ調べてみたのですが,分かりませんでした。 後者の方が書きやすいのなら,そちらで検討してみようと思います.
お礼
再び回答ありがとうございます. そうですね,再度調べてみたらWindowsの機能でSetCursorPosや,あとClipCursorで点固定,というものがあるみたいです.どのようにするかはまた考え直さなければならないと思いますが,それらを活用してみようと思います.