EnableWindow

解決


もめ  2006-04-07 19:31:10  No: 61151

ボタンが押されたら、ボタンのEnableWindowをFALSEにして
操作不可に設定した後、ある処理を実行して、
処理が完了したら、EnableWindowをTRUEにして
ボタンを操作可能に設定しているのですが、

ある処理を実行中にボタンが押されたら、
操作不可にしているのに、ある処理が完了した後に
またある処理が実行されてしまいます。

これを回避するにはどうしたらいいのでしょうか・・・

初歩的な質問で申し訳ありませんが、どなたかご教授ください。
環境はVC2003/MFCです。


Yuki  2006-04-07 20:40:26  No: 61152

処理中にEnableWindowが効いていればボタンを押しても
反応しないと思うのだけけれど・・・。

GUI的にできないのであればフラグでも立てるしか
ないのかと。


RAPT  2006-04-07 21:24:21  No: 61153

単にメッセージが残っているだけでしょう。

ボタンクリック時のメッセージ(WM_LBUTTONDOWN)を、ボタンが操作不可と
なっている間は破棄するようにすれば良いのでは?


dairygoods  2006-04-07 22:06:48  No: 61154

void CMyDlg::Onボタン()
{
  ボタン.EnableWindow(FALSE);
  ある処理;
  ボタン.EnableWindow(TRUE);
}

もしかして、こうなっていますか?
だとすると、関数から抜けるまでは、
クリックを含む全てのメッセージが処理されないので、
EnableWindow の意味がありません。

時間のかかる処理を行うための手法を、
スレッド、タイマー、メッセージループなどの
キーワードで調べてみてください。


もめ  2006-04-08 01:49:51  No: 61155

dairygoodsのご指摘どおりでした・・・
ある処理をワーカースレッドとして実行することで
解決しました。

みなさんありがとうございました。


もめ  2006-04-08 01:50:21  No: 61156

dairygoods様のご指摘どおりでした・・・
ある処理をワーカースレッドとして実行することで
解決しました。

みなさんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加