【发布时间】:2009-03-12 17:57:23
【问题描述】:
如何禁用 CBitmapButton?我尝试使用 m_bitmapbutton.EnableWindow(false);但它不起作用。它仍然会触发一个事件。
如果事件 B 正在执行(从按钮 B),我想要做的是阻止按钮 A 触发事件 A。所以在事件 B 中,我想禁用按钮 A。
【问题讨论】:
标签: c++ visual-c++ button mfc
如何禁用 CBitmapButton?我尝试使用 m_bitmapbutton.EnableWindow(false);但它不起作用。它仍然会触发一个事件。
如果事件 B 正在执行(从按钮 B),我想要做的是阻止按钮 A 触发事件 A。所以在事件 B 中,我想禁用按钮 A。
【问题讨论】:
标签: c++ visual-c++ button mfc
以下是要检查的事项列表:
您总是可以只设置一个布尔成员变量来指示按钮 A 已禁用,并在设置此布尔成员时忽略发送给它的任何事件。
使用this class from 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);
}
希望对您有所帮助!
哈维尔
【讨论】: