CBitmapButton を無効にするにはどうすればよいですか? m_bitmapbutton.EnableWindow(false); を使用してみました。しかし、うまくいきません。それはまだイベントを発生させます。
私がやろうとしているのは、イベント B が (ボタン B から) 実行されている場合に、ボタン A がイベント A を発生させないようにすることです。イベント B では、ボタン A を無効にします。
CBitmapButton を無効にするにはどうすればよいですか? m_bitmapbutton.EnableWindow(false); を使用してみました。しかし、うまくいきません。それはまだイベントを発生させます。
私がやろうとしているのは、イベント B が (ボタン B から) 実行されている場合に、ボタン A がイベント A を発生させないようにすることです。イベント B では、ボタン A を無効にします。
確認する項目のリストは次のとおりです。
ボタン A が無効であることを示すブール値のメンバー変数を設定し、このブール値のメンバーが設定されたときに送信されたイベントを無視することができます。
CodeProject からこのクラスを使用する方が簡単かもしれません。
問題は、イベント B に参加しているときに、このウィンドウのメッセージがディスパッチされていないことだと思います。そのため、イベント B への参加を終了し、ボタン A を再度有効にした後、それらはキューに入れられてディスパッチされます。そんな感じ:
これは CBitmapButton だけの問題ではありません...他のボタンでも発生するはずです (私は自分で試したことはありません)。
考えられる回避策は、ボタンを再度有効にする前に、このウィンドウのマウスイベントをディスパッチすることです...私はこの種のことをあまり好きではありませんでしたが...おそらく誰かがあなたにもっと良い解決策を与えることができます:
void CMyDlg::OnBnClickedButtonB()
{
m_buttonA.EnableWindow(FALSE);
//Process button B clicked event
MSG msg;
while(PeekMessage( &msg,
GetSafeHwnd(),
WM_MOUSEFIRST,
WM_MOUSELAST,
PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
m_buttonA.EnableWindow(TRUE);
}
この助けを願っています!
ハビエル