ボタンが押されたら、ボタンのEnableWindowをFALSEにして
操作不可に設定した後、ある処理を実行して、
処理が完了したら、EnableWindowをTRUEにして
ボタンを操作可能に設定しているのですが、
ある処理を実行中にボタンが押されたら、
操作不可にしているのに、ある処理が完了した後に
またある処理が実行されてしまいます。
これを回避するにはどうしたらいいのでしょうか・・・
初歩的な質問で申し訳ありませんが、どなたかご教授ください。
環境はVC2003/MFCです。
処理中にEnableWindowが効いていればボタンを押しても
反応しないと思うのだけけれど・・・。
GUI的にできないのであればフラグでも立てるしか
ないのかと。
単にメッセージが残っているだけでしょう。
ボタンクリック時のメッセージ(WM_LBUTTONDOWN)を、ボタンが操作不可と
なっている間は破棄するようにすれば良いのでは?
void CMyDlg::Onボタン()
{
ボタン.EnableWindow(FALSE);
ある処理;
ボタン.EnableWindow(TRUE);
}
もしかして、こうなっていますか?
だとすると、関数から抜けるまでは、
クリックを含む全てのメッセージが処理されないので、
EnableWindow の意味がありません。
時間のかかる処理を行うための手法を、
スレッド、タイマー、メッセージループなどの
キーワードで調べてみてください。
dairygoodsのご指摘どおりでした・・・
ある処理をワーカースレッドとして実行することで
解決しました。
みなさんありがとうございました。
dairygoods様のご指摘どおりでした・・・
ある処理をワーカースレッドとして実行することで
解決しました。
みなさんありがとうございました。
ツイート | ![]() |