はじめまして あか といいます。
VC++.NETのダイアログベースでつくっています。
ボタンを1回クリックすると変数を+1するという処理
をしています。
しかし、現在はカウントアップさせるためには1回1回
ボタンをクリックしなければならないという状況で、
私としてはボタンを押している間、足し続けるという
処理をしたいと考えていますが、どうしていいのかわかりません。
よろしくお願いします。
タイマーを一個用意し、
「タイマーが定周期イベント投げたときボタンが押されていたら+1」
ではダメかしら…
似たような感じになりますけれど、
ボタンを押したタイミングでSetTimer
OnTimerでカウントアップ
ボタンを離したタイミングでKillTimer
で良いような気もします。
押したタイミングでマウスカーソルをキャプチャしておかないと
押しっぱなしでマウスカーソルが離れた時に止められないので
キャプチャしといてMouseMoveを拾って、ボタンから離れたら
キャプチャ解除してKillTimerとか。
実際にはもうちょっと調整が必要かも。
ともあれ、常套手段という気もします。
よく考えたら、επιστημηさんの方法の方がシンプルでよいかも。
この場合、タイマーはずっと設定しっぱなしですよね。
> この場合、タイマーはずっと設定しっぱなしですよね。
うん、だけどボタンの押し/離しとまったく関係なくタイマーが動き続けているので、
インターバルが長いとタイミングによってはボタンが押されてから+1までの間が空きます。
ホントならキー・リピートみたいな動き:押したら直ちに+1、しばらく押し続けて
いると+1+1+1... となるのが望ましいのでしょうが、
それはプログラマがどこまで凝るか、だな ^^;
自分ならタイミングの問題があるのでPATIOさんの方でやりますね。
というかある意味情けないですがεπιστημηさんの方法は思いつかなかった。orz
やはり「無駄なことはしない」というのが基本的にはあるので
必要のない時にもタイマーが動いているという状態が思い付かなかった。
けど、ある時にはこういう大胆な?考えも必要なんでしょうね。
タイミング的なことを気にしないならεπιστημηさんの方がシンプルだし楽ですね。
ま、最終的には
>それはプログラマがどこまで凝るか、だな ^^;
これにつきますが。
>「タイマーが定周期イベント投げたときボタンが押されていたら+1」
タイマーを使うということはわかったのですが、「ボタンが押されている」
という状態を取得するには、どのようにすれば良いのかがわからないです。
申し訳ありませんがよろしくお願い致します。
>「ボタンが押されている」という状態を取得するには、
> どのようにすれば良いのかがわからないです
なんでやねん orz
ButtonDownからButtonUpまでの間、ボタンが押されています。
>「ボタンが押されている」という状態を取得するには、
> どのようにすれば良いのかがわからないです
自分で状態管理をしてください。
επιστημηさんが書かれている通り、
フラグでも用意してButtonDownでTRUEにして
ButtonUpでFALSEにすれば、判定が付くのでは?
基本的にクラスメソッド等で直接取得できない情報は
プログラマ自身で管理して使うしかありません。
おかげさまで解決することができました。
επιστημηさん、PATIOさん、リンクさん
回答していただいてありがとうございました。