请教在WINCE中如何防止按钮重复响应?

时间:2022-05-10 07:58:29
WINCE程序中有一处,点击BUTTON后要进行较长时间的处理,在这段时间内如果连续点击该按钮,程序就会不停的重复点击按钮的处理.我试图让按钮EnableWindow(FALSE)或者增加全局的计数器或者让鼠标编程沙漏都不管用,不知道还有别的方法么?

20 个解决方案

#1


不可能不管用啊
或许是你的代码有问题

#2


每当点击按钮的时候,就启一个线程,让这个线程完成你要做的工作。如果出现多次点击,那么就同样的启多个线程。线程执行完后就自动退出。这样就不会影响你的界面效果,不会卡死,而且效率也较高。

#3


在处理函数中申明一个static  的变量设置一个初始值  每次调用这个函数时判断该值是不是初始值如果不是就返回如果是先将其设置另一个值(不与初始值相同)  再处理, 处理完成后再将其设置为初始值。

其实用EnableWindow应该是可以的  可能是你在其它地方搞错了, 好好检查一下

#4


你点击一次后,在任务完成前让按钮灰掉,直到你完成响应任务

#5


EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。

#6


引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

#7


不好解决呀。

这是我找到的很久前的帖子,可惜没有答案。
http://topic.csdn.net/t/20060530/16/4789041.html

#8


引用 6 楼 hxt6699 的回复:
引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);肯定是可以的,你的代码肯定是有问题的。。。

#9


引用 8 楼 visualeleven 的回复:
引用 6 楼 hxt6699 的回复:
引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

GetDlgItem(IDC_BUTTON1)->EnableWind……



老大,我哭了,EnableWindow(FALSE)在XP下肯定没问题,可是在WINCE下就不灵啦...

#10


你把EnableWindow(FALSE)放在函数的最开始,不要放在后面

#11


EnableWindow(FALSE)怎么不能用,我现在就在用,你自己要先得到按钮的控制指针

#12


引用 9 楼 hxt6699 的回复:
引用 8 楼 visualeleven 的回复:
引用 6 楼 hxt6699 的回复:
引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

GetDlgIte……

那你设置标记啊,比如int flag= 0;
在Button的响应函数中
{
 ++flag;
 if(1 == flag)
 {
  ....// 你后面的计算,完成以后重置flag的值为0
  flag = 0;
 }
}

#13


比如按钮控制变量为m1,那么m1.EnableWindow(FALSE),我现在CE下就这么用

#14


引用 9 楼 hxt6699 的回复:
引用 8 楼 visualeleven 的回复:
引用 6 楼 hxt6699 的回复:
引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

GetDlgIte……

你贴个你button的函数的代码,你计算的代码就不要了

#15


我以前的代码,楼主看看
 CButton * pbutton=(CButton *)GetDlgItem(IDC_BUTTON1);
   pbutton->EnableWindow(false);

#16


代码如下,非常简单:

//采样
void CDlg_SPCL::OnBnClickedButtonSpclSampling()
{
//---数据保存标志,当有数据修改后(采样或删除)为1,数据没有修改为0
p_save_bz=1;

GetDlgItem(IDC_BUTTON_SPCL_Sampling) -> EnableWindow(FALSE);//使采样按钮不可用


//---测量
SPCL_CeLiang();

//---重画曲线
CClientDC dc(this); 
int i;

i=SPCL_SelectFreq();   //根据RadioButton单选按钮控件选择的是哪个频率
SPCL_ShowCurve(&dc,i); //显示该频率的曲线

GetDlgItem(IDC_BUTTON_SPCL_Sampling) -> EnableWindow(TRUE); //使采样按钮可用

this-> SetFocus();

}

#17


在网上查出,Application.ProcessMessages可以解决。

谁用过?

出处:http://topic.csdn.net/t/20061202/11/5201386.html

#18


终于搞定,谢谢大家。
问题出在消息队列。

#19


你好!我遇见了同样的问题,不知道你怎么解决的,可否指点一下。

#20


引用 18 楼 hxt6699 的回复:
终于搞定,谢谢大家。
问题出在消息队列。


LZ能否贴出详细的解决办法?

#1


不可能不管用啊
或许是你的代码有问题

#2


每当点击按钮的时候,就启一个线程,让这个线程完成你要做的工作。如果出现多次点击,那么就同样的启多个线程。线程执行完后就自动退出。这样就不会影响你的界面效果,不会卡死,而且效率也较高。

#3


在处理函数中申明一个static  的变量设置一个初始值  每次调用这个函数时判断该值是不是初始值如果不是就返回如果是先将其设置另一个值(不与初始值相同)  再处理, 处理完成后再将其设置为初始值。

其实用EnableWindow应该是可以的  可能是你在其它地方搞错了, 好好检查一下

#4


你点击一次后,在任务完成前让按钮灰掉,直到你完成响应任务

#5


EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。

#6


引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

#7


不好解决呀。

这是我找到的很久前的帖子,可惜没有答案。
http://topic.csdn.net/t/20060530/16/4789041.html

#8


引用 6 楼 hxt6699 的回复:
引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);肯定是可以的,你的代码肯定是有问题的。。。

#9


引用 8 楼 visualeleven 的回复:
引用 6 楼 hxt6699 的回复:
引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

GetDlgItem(IDC_BUTTON1)->EnableWind……



老大,我哭了,EnableWindow(FALSE)在XP下肯定没问题,可是在WINCE下就不灵啦...

#10


你把EnableWindow(FALSE)放在函数的最开始,不要放在后面

#11


EnableWindow(FALSE)怎么不能用,我现在就在用,你自己要先得到按钮的控制指针

#12


引用 9 楼 hxt6699 的回复:
引用 8 楼 visualeleven 的回复:
引用 6 楼 hxt6699 的回复:
引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

GetDlgIte……

那你设置标记啊,比如int flag= 0;
在Button的响应函数中
{
 ++flag;
 if(1 == flag)
 {
  ....// 你后面的计算,完成以后重置flag的值为0
  flag = 0;
 }
}

#13


比如按钮控制变量为m1,那么m1.EnableWindow(FALSE),我现在CE下就这么用

#14


引用 9 楼 hxt6699 的回复:
引用 8 楼 visualeleven 的回复:
引用 6 楼 hxt6699 的回复:
引用 5 楼 zxdlms 的回复:
EnableWindow(FALSE)不可能没有用啊。你不进行处理看看EnableWindow(FALSE)管用不。



首先谢谢大家的回复。
EnableWindow(FALSE)在WINCE下确实不管用,代码没问题的。郁闷。

GetDlgIte……

你贴个你button的函数的代码,你计算的代码就不要了

#15


我以前的代码,楼主看看
 CButton * pbutton=(CButton *)GetDlgItem(IDC_BUTTON1);
   pbutton->EnableWindow(false);

#16


代码如下,非常简单:

//采样
void CDlg_SPCL::OnBnClickedButtonSpclSampling()
{
//---数据保存标志,当有数据修改后(采样或删除)为1,数据没有修改为0
p_save_bz=1;

GetDlgItem(IDC_BUTTON_SPCL_Sampling) -> EnableWindow(FALSE);//使采样按钮不可用


//---测量
SPCL_CeLiang();

//---重画曲线
CClientDC dc(this); 
int i;

i=SPCL_SelectFreq();   //根据RadioButton单选按钮控件选择的是哪个频率
SPCL_ShowCurve(&dc,i); //显示该频率的曲线

GetDlgItem(IDC_BUTTON_SPCL_Sampling) -> EnableWindow(TRUE); //使采样按钮可用

this-> SetFocus();

}

#17


在网上查出,Application.ProcessMessages可以解决。

谁用过?

出处:http://topic.csdn.net/t/20061202/11/5201386.html

#18


终于搞定,谢谢大家。
问题出在消息队列。

#19


你好!我遇见了同样的问题,不知道你怎么解决的,可否指点一下。

#20


引用 18 楼 hxt6699 的回复:
终于搞定,谢谢大家。
问题出在消息队列。


LZ能否贴出详细的解决办法?

#21