为了实现一个Spin+Edit的组合框效果(因为是小数操作,所以没法用常规方法),
我用一个CSpin类继承自CSpinButtonCtrl。其中我想模仿普通的spinbox,实现这样的效果:
鼠标按下后,等1秒,然后数值连续增加,每0.5秒增加1.
我用两个定时器来实现:void CSpin::OnLButtonDown(UINT nFlags, CPoint point) 
{
//激活定时器0,1秒后进入OnTimer函数
SetTimer(0,1000,NULL);
CSpinButtonCtrl::OnLButtonDown(nFlags, point);
}void CSpin::OnTimer(UINT nIDEvent) 
{
if (0==nIDEvent)
{
//干掉定时器0
KillTimer(0);
//激活定时器1
SetTimer(1,500,NULL);
}
else if(1==nIDEvent)
{
//使父窗口上显示的某个值持续不断的增加
int i = GetParent()->GetDlgItemInt(IDC_STATIC1);
GetParent()->SetDlgItemInt(IDC_STATIC1, ++i);
}
CSpinButtonCtrl::OnTimer(nIDEvent);
}
void CSpin::OnLButtonUp(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
//鼠标松开后,停止增加。
KillTimer(1);
KillTimer(0); CSpinButtonCtrl::OnLButtonUp(nFlags, point);
}
鼠标按下后等一会连续增加数值的效果倒是实现了,但是和我设置的定时器时间不符。
无论我怎样设置定时器时间,等待的时间都很短,数值增加的频率都很快,像是普通的
CSpinButtonCtrl+CEdit中的那种增加速度,请问这是怎么回事?另外,我对父窗体对话框本身也用这种方法,鼠标按到对话框上就设定时器,等等,却是没有问题的,间隔时间和增加频率都随定时器设置值而改变,CDialog和CSpinButtonCtrl在这方面为什么会有区别呢?