MFC 禁用按钮以后,依然可以点击按钮触发事件
代码如下:
void CMy2Dlg::OnBnClickedButton1()
{
if(m_bol == true)
{
m_bol = false;
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
AfxMessageBox(L"click");
for (int i = 1; i <= 10; ++i)
{
Sleep(500);
}
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
m_bol = true;
}
}
问题:期望的是当按钮点击以后,禁用该按钮,直到处理完成以后恢复,但是发现即使如上这样加变量控制也没有办法解决这个问题,分析了认为是在button为Enable状态时,还是会有消息加入到消息队列中去。
求大神解决。。其中Sleep是为了模拟处理过程,这个事简化的 MFC 禁用按钮 消息队列
[解决办法]
你是想点击按钮后,禁用按钮并执行某个操作,执行完了,按钮才可用,对吧?
要满足这个需求,你就不能再按钮点击事件种去执行操作,只有开一个线程去执行,执行完后,再通知主线程启用该按钮。
[解决办法]
别在主线程中Sleep了,做事情改在线程中去。OnBnClickedButton1()先Disable button,然后通知线程做事,线程做完以后发送一个消息到UI线程,在UI线程的自定义消息响应函数中Enable Button即可。
[解决办法]
这样单线程的处理肯定是没有作用的,你的想法太简单了。
[解决办法]
这个要用自定义消息处理
先disable按钮, 再做你要做的事,做完后发送一个enable消息
消息处理函数里做enable的工作
[解决办法]
我试了下代码,我这里是可以的,但建议用线程处理,否则主对话框会停那在里不动。