一个小问题,C++中UpDateData(false)的循环调用,不知道可不可以?

voidCMyTabDlg::OnBnClickedButton1()//响应鼠标点击Button1时间{//TODO:在此添加控件通知处理程序代码inti=1;intm... void CMyTabDlg::OnBnClickedButton1()//响应鼠标点击Button1时间
{
// TODO: 在此添加控件通知处理程序代码
int i=1; int m=1;
while(m_para1.m_4Para1>=22||m_para1.m_4Para1<=14)
{
m_para1.UpdateData(true);
m_para1.mCount(i,m); //这个自定义函数用来延时,m为延时间隔,每延时一次传进来的i值会加1
m_para1.SetPara1Value(i);//通过函数修改要显示的值
m_para1.UpdateData(false);
}
}
现在运行点击Button1没问题,而且会在一定的延时之后显示面板上会显示改变后最终的结果。但是设计的初衷是每延时一次,就更新显示一次。可是已经定义了while循环,为什么UpDateData貌似只更新了一次,就是最后更新最后结果,中间的结果不会更新到显示面板。这是为什么啊?要实现这种循环更新该怎么修改。
展开
 我来答
ExcaliburZ
2011-05-22 · TA获得超过1102个赞
知道小有建树答主
回答量:750
采纳率:0%
帮助的人:804万
展开全部
UpdateData是通过数据交换实现改变控件显示的.
改变了之后必须要调用一次OnPaint才能实现刷新
你这样在一个函数里反复多次调用是没有效果的
只有最后一次改变的值会出函数而后调用到OnPaint
在MFC中这种定时刷新的工作最好还是交给定时器去做.
步骤大致如下:

1:先设定一个定时器.SetTimer(定时器代号,定时器触发间隔[比如你的m],回调函数[NULL为给设置窗口发送WM_TIMER消息])
2:在定时器中
i++;
m_para1.SetPara1Value(i);//通过函数修改要显示的值
m_para1.UpdateData(false);
追问
额,这个SetTimer函数的第三个参数:回调函数[NULL为给设置窗口发送WM_TIMER消息],这是用来干啥的,不太明白啊,刚才试了试没有加这个参数还是不对。第一参数:定时器代号也不太明白的。。
追答
你首先对这个窗口添加WM_TIMER消息映射.用类向导添加.
而后会生成一个afx_msg void OnTimer(UINT nIDEvent);这样的消息函数.
这里的nIDEvent就是你在SetTimer的第一个参数要填的数字,意在标示是哪个定时器.
在OnTimer里就可以根据nIDEvent来区分.
第三个就填NULL就好.
综上所述,比如SetTimer(1205,10000,NULL);
// 1205代表代号1205.
// 10000代表每10秒触发一次(按毫秒算的.所以10000毫秒就是10秒)

然后在OnTimer(UINT nIDEvent)中
if(nIDEvent == 1205 /* 对应的是SetTimer的第一个参数的数字 */)
{
//这里就是每次10秒触发触发器后要做的时候.
}
zw...2@163.com
2011-05-22 · TA获得超过308个赞
知道答主
回答量:113
采纳率:0%
帮助的人:84.7万
展开全部
UpdateData(true)是把控件中的数据保存到相应的控件变量中去.
UpdateData(false)是把控件中的数据显示到相应的控件上面去.
你程序中的 i 变量有点不懂.它是个局部变量, m_para1.mCount(i,m); 调用时,i=1作为参数传递.其值本身不会改变的.
m_para1.SetPara1Value(i);中的 i 也是i=1作为参数传递.
在你上面的程序中i的值一直都是1.
由于还不是很理解你的程序意图.不是很确定是否可以解决.
如果你希望 i 值可以随着调用而改变可以把i设为CMyTabDlg的成员变量.
追问
呵呵,你看的很仔细,i是以引用体形式被函数mCount接收过去的,函数mCount是这样定义的:
mCount(int &i , int m),这个形参i是引用体,所以在这个函数中会改变i的值的。
额,貌似上面那位说的比较再理,这个分啊,真不知道该怎么给了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式