Полагаю, проблема в том, что, пока вы посещаете Событие B, сообщения для этого окна не отправляются. Таким образом, они ставятся в очередь и отправляются после того, как вы закончите посещать событие B, и вы снова включили кнопку A. Примерно так:
- OnBnClickedButtonB
- buttonA.EnableWindow (FALSE)
(события мыши для окна ставятся в очередь и не отправляются)
- buttonA.EnableWindow (TRUE)
- ~ OnBnClickedButtonB
(приложение отправляет события в очередь, поэтому кнопка снова включается)
Это не просто проблема с 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);
}
Надеюсь, это поможет!
Javier