MFC VC++ アプリケーション Tip集 サイト


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 へ戻る