| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1345 人关注过本帖
标题:OnTimer()函数问题
只看楼主 加入收藏
suchengjie
Rank: 1
等 级:新手上路
帖 子:118
专家分:1
注 册:2013-3-2
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:11 
OnTimer()函数问题
我在View类的OnCreate中加入一个定时器SetTimer(0,100,NULL),然后再View类的OnTimer函数中写入如下代码:
        for(int i = 0 ; i < 50 ; ++i)
            {
                if(this->demdata->data != NULL)
                    this->demdata->data[300][400]-=i*100;
                if(    this->demdata->data[300][400] <0)
                    this->demdata->data[300][400]=941045;
            }
            CMainFrame *pMainFrm=(CMainFrame *)AfxGetMainWnd();
            CMDIChildWnd *pChild = pMainFrm->MDIGetActive();
            CLAIBINView *pView=(CLAIBINView*)pChild->GetActiveView();
            if(maploadok)pView->mapopen((this->demdata));
            KillTimer(0);
初始的data[300][400]=941045,表示长度为941045的直线。我现在想用一个for循环使得每循环一次让data[300][400]减去i*100,然后将每次的直线重新绘制出来。也就是让data[300][400]这条直线动态的变短。现在的问题是这条直线只是变一次而已,而不是每循环一次变一次。
搜索更多相关主题的帖子: 定时器 
2013-10-20 11:23
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
没有完整代码,不好回答。

估计是你KillTimer 了,只是响应OnTimer 一次

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-10-20 12:27
suchengjie
Rank: 1
等 级:新手上路
帖 子:118
专家分:1
注 册:2013-3-2
收藏
得分:0 
不是循环完之后killtimer函数才生效吗?不加killtimer的话会一直循环下去直到为负值,然后又恢复到初值,这样就停不下来
2013-10-21 08:57
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
“现在的问题是这条直线只是变一次而已” 你怎么知道它只是变一次?你是通过调试吗?还是通过界面有信息显示?

如果是通过显示的话,那么 在Ontime中,改变了多次,你也是只看到一次而已,因为只是刷新一次而已

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-10-21 09:56
suchengjie
Rank: 1
等 级:新手上路
帖 子:118
专家分:1
注 册:2013-3-2
收藏
得分:0 
应该就像你说的那样,我怎样通过显示是在ontimer中改变多少次就刷新多少次呢
2013-10-21 10:26
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
回复 5楼 suchengjie
设置个成员变量Count,用于你的进度控制

OnTime()

     Count--;
     if (Count <= 0) {
        killtime
     }

     data 递减。刷新

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-10-21 12:30
潇翊
Rank: 3Rank: 3
来 自:湖北襄阳
等 级:论坛游侠
帖 子:39
专家分:131
注 册:2012-2-29
收藏
得分:10 
程序代码:
//代码逻辑问题:for循环里面if在不断循环执行,每当值减到<0,就会被重置为初值,直到i=50。
所以程序会先执行完循环,再去显示,当然只有一次变化。应该是每执行一次,马上接着执行显示程序。
for(int i = 0 ; i < 50 ; ++i){
     if(this->demdata->data != NULL)
          this->demdata->data[300][400]-=i*100;
                if(this->demdata->data[300][400]>=0){
                    CMainFrame *pMainFrm=(CMainFrame *)AfxGetMainWnd();
                    CMDIChildWnd *pChild = pMainFrm->MDIGetActive();
                    CLAIBINView *pView=(CLAIBINView*)pChild->GetActiveView();
                    if(maploadok)pView->mapopen((this->demdata));
                          KillTimer(0)}
                else
                     this->demdata->data[300][400]=941045;
}
;

神马都是浮云,技术才是王道!
2013-10-21 13:25
suchengjie
Rank: 1
等 级:新手上路
帖 子:118
专家分:1
注 册:2013-3-2
收藏
得分:0 
回复 6楼 yuccn
还是和原来的一样,只显示一次
2013-10-21 15:36
suchengjie
Rank: 1
等 级:新手上路
帖 子:118
专家分:1
注 册:2013-3-2
收藏
得分:0 
回复 7楼 潇翊
按照你说的改了,没有任何变化
2013-10-21 15:37
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
调试下。

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-10-21 16:27
快速回复:OnTimer()函数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036390 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved