5章.CButtonクラス ボタン 5−2.長い処理のボタンを複数回実行(押)されないようにする |
処理が遅くて動いているのか解らず、何度もボタンを押されてしまうとかいうことがあります。 そうすると、長い処理を実行中にメッセージキューにメッセージがたまってしまい、処理終了後に再度処理が実行されしまいます。 単にEnableWindowで入力を拒否しても、メッセージが溜まってしまいます。 <長い処理中の入力も処理後の入力として処理されるらしい。 以下のようにすると破棄できるようです。 void CTest0022Dlg::OnButton30() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください MSG msg; MessageBox("長い処理が始まるよ!"); AfxGetMainWnd()->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON30)->EnableWindow(FALSE);//ENTERキー対策でボタンも処理します。 Sleep(3000);//長い処理 while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) AfxGetThread()->PumpMessage(); GetDlgItem(IDC_BUTTON30)->EnableWindow(TRUE); AfxGetMainWnd()->EnableWindow(TRUE); } |
Top へ戻る |