MFCで、専用データをカーソルキーやホイールなどで次々と切り替えて表示する、
簡易ビューアのダイアログを作成しています。
大抵のデータは小さいものを想定しているのですが、
中には大きなものもあり、切り替えに1秒前後待たされる可能性もあるため、
読み込み開始時にCWaitCursorで砂時計を入れるようにしました。
すると、一瞬で処理が終わる小さいデータでも毎回必ず砂時計が表示され、
ホイールで次々と切り替える動作などを行った際に
マウスカーソルがチカチカ切り替わって鬱陶しいと言われてしまいました。
関数内の読み込み処理が1秒続いたら初めて砂時計に切り替わるとか、
そういう動きができないかを模索しているのですが、
実現されているかたはいらっしゃいませんでしょうか。
まず、その「データ」のサイズがあらかじめわかっていれば、その大小で
分岐すればよいことですよね(^^)。
次に、CWaitCursorはオブジェクトになっちゃってるので、
かえって使いやすさを悪化させてますね。こんなもん捨てて
SDKの::SetCursor( ::LoadCursor( IDC_WAIT))を使いましょう、
これなら任意の場所で発行できるので気が楽です。
これは、読み込みルーチンからでも発行でき、元に戻したければ
例えばDLG側の再表示の位置で、固定的に
::SetCursor( ::LoadCursor( IDC_ARROW));//元に戻す
とできるわけです。
最後に、読み込みを開始する前にサイズがわかっていない場合は、
特定のByte数まで読み込んで、まだ終了しそうもなかったら
カーソルを砂時計に変更するという方法と、
読み込み開始前にワンショットタイマーをかけて、タイムアウト後に
当該ファイルの読み込みが完了してなければ砂時計にする
という方法も考えられますね。
ツイート | ![]() |