sleep() 导致 mfc 多个按钮 禁用 只响应当前按钮 其他响应顺序出bug

在mfc 里用了3个按钮控件,关联变量mbnt1;mbnt2;mbnt3;每一个按钮按下先使得3个按钮全部disable禁用,执行完相应消息响应代码后在全部enable启用;但是实际上在按钮1的消息响应里只有按钮1被disable,在按钮2的消息响应里只有按钮2被disable,按钮3同样,测试了很多次,比如按钮1的消息相应:

mbnt1.enablewindow(false);//单步执行到这一句按钮1禁用
mbnt2.enablewindow(false);//没反应
mbnt2.enablewindow(false);//没反应
xxxxxxxxxxxxxxxxxxx其他代码

mbnt1.enablewindow(true);//没反应
mbnt2.enablewindow(true);//没反应
mbnt2.enablewindow(true);//没反应
//按f5一次性相应按钮2和按钮3的禁用和按钮1按钮2和按钮3的启用

目前测试这个问题是由于程序里的Sleep()导致的,把程序里的sleep去掉就不存在这个问题,但是sleep是必要的!求大神指点!!!

mfc

4个回答

使用工具箱里面的mfcbutton,而不是button解决这个bug

开线程,这样会使电脑卡在这个地方,一直执行。将其他代码放在线程里面。使用逻辑语句将其他按钮的程序禁止掉。

我新建了一个对话框,只有3个按钮,还存在这个问题,我希望实现按钮刚按下所有按钮禁用,执行一些代码后所有按钮启用,但是实际上按钮按下只有按的这个按钮禁用,执行一些代码后在一瞬间完成其他按钮禁用,所有按钮启用

 void SetButtonStatus(BOOL bStatus)
{   
    mbnt1.enablewindow(bStatus);
    mbnt2.enablewindow(bStatus);
    mbnt3.enablewindow(bStatus);
}

按钮的状态写一个函数,通过函数来实现Button的状态。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问