処理中の砂時計カーソル表示について、質問があります。
開発環境は、Windows2000、VC++6.0です。
プログラムは、マルチスレッドで動作しているのですが、
一方のスレッド(サブスレッド)が仕事中に、
メインスレッドを入力禁止(砂時計表示)にしたいのですが、
それがうまくいきません。
メインスレッドで、
サブスレッドが動作前に、以下をコールし、
AfxGetApp()->BeginWaitCursor();
サブスレッドから終了通知がきたら、
AfxGetApp()->EndWaitCursor();
をコールしています。
単一スレッドのプログラムでは、うまく動作します。
Windowsはマウスカーソルが移動するたびにWM_SETCURSORを使って
カーソルを更新しています。
メインスレッドが普通にメッセージ処理をしているならば、
常にCWnd::OnSetCursor()が呼び出され、カーソルは元に戻ってしまいます。
次のどちらかの方法で対処できます。
1) OnSetCursor()ハンドラを追加して、
スレッドが動いているときは、独自のカーソルをセットする。
(CWnd::OnSetCursor()を呼び出さないようにするだけでいいかも)
2) サブスレッド内でRestoreWaitCursor()をしつこく呼び出す。
dairygoods いつもありがとうございます。
内部的に、砂時計表示中は、OnSetCursor()内で、RestoreWaitCursor()を
コールすることで、解決できました。
CWnd::OnSetCursor()をコールしないという方法は、うまくいきません
でした。
申し訳ありません。 さんが抜けてしまいました。
dairygoodsさん いつもありがとうございます。
解決しました。