失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > vc下禁止按钮连续点击的方法

vc下禁止按钮连续点击的方法

时间:2019-02-10 09:05:24

相关推荐

vc下禁止按钮连续点击的方法

最近接手的项目需要(其实就是一个桌面小软件),需要通过MFC上的上一页和下一页按钮,控制CHTMLCTRL的显示。但CHTMLCTRL显示是有延迟的,一旦按钮点击过快,该控件会无法及时响应。所以,需要做一个禁止按钮连续点击的功能。

该过程主要使用ontimer来实现的。

1. 先点击对话框,找到可添加的事件(属性里面)WM_TIMER,添加ontimer事件。

注意,ontimer事件,在vc 6.0 和vs中的声明是有区别的。

vc 6中是:

afx_msg void OnTimer(UINT nIDEvent);

vs中:

afx_msg void OnTimer(UINT_PTR nIDEvent);

当然,通过系统生成的方式是最方便的而且不会出错。

2. 在按钮的点击时间函数里面,先要禁用该按钮,然后执行所要处理的过程,之后设置时钟。这里需要注意的是时钟的启动与该函数的执行仍然是线性的,即当当前函数执行完成之后,才会执行Ontimer。

GetDlgItem(IDC_NEXTPAGE)->EnableWindow(FALSE);m_bButtonEnable_pre = FALSE; m_pre.EnableWindow(FALSE);。。。//your processSetTimer(1, 100, NULL);

这样就设置好了一个时钟,一旦点击该按钮,就会执行该时钟,间隔100ms执行。

3. 在ontimer里面进行按钮的失效和有效设置:

if (m_bButtonEnable_pre) { GetDlgItem(IDC_PREPAGE)->EnableWindow(TRUE);KillTimer(1); } else { GetDlgItem(IDC_PREPAGE)->EnableWindow(FALSE);} CDialog::OnTimer(nIDEvent);

这样每次按了上一页的按钮,就会执行一次Ontimer()函数,并且判断其状态,如果有效状态,就kill掉该timer。其中的m_bButtonEnable_pre可以在按钮的处理程序中动态改变。

以上是本人执行成功的例子。下面介绍一个网上给的另外的解决方案。

=============================传说中的分割线=============================

可以重新设置按钮的焦点,也就是转移焦点的做法。

void CTestDlg::OnBtnStart() { m_btnStart.EnableWindow(FALSE);//m_btnStart在头文件中定义CButton m_btnStart; GetDlgItem(IDOK)->SetFocus(); aa();//子函数 Sleep(1000); bb(); Sleep(2000); //..... m_btnStart.EnableWindow(TRUE); } IDOK也可以是其他

这个未经试验,可能会奏效吧。

如果觉得《vc下禁止按钮连续点击的方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。