注册 登录
编程论坛 VC++/MFC

OnTimer()函数问题

suchengjie 发布于 2013-10-20 11:23, 1345 次点击
我在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]这条直线动态的变短。现在的问题是这条直线只是变一次而已,而不是每循环一次变一次。
11 回复
#2
yuccn2013-10-20 12:27
没有完整代码,不好回答。

估计是你KillTimer 了,只是响应OnTimer 一次
#3
suchengjie2013-10-21 08:57
不是循环完之后killtimer函数才生效吗?不加killtimer的话会一直循环下去直到为负值,然后又恢复到初值,这样就停不下来
#4
yuccn2013-10-21 09:56
“现在的问题是这条直线只是变一次而已” 你怎么知道它只是变一次?你是通过调试吗?还是通过界面有信息显示?

如果是通过显示的话,那么 在Ontime中,改变了多次,你也是只看到一次而已,因为只是刷新一次而已
#5
suchengjie2013-10-21 10:26
应该就像你说的那样,我怎样通过显示是在ontimer中改变多少次就刷新多少次呢
#6
yuccn2013-10-21 12:30
回复 5楼 suchengjie
设置个成员变量Count,用于你的进度控制

OnTime()

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

     data 递减。刷新
#7
潇翊2013-10-21 13:25
程序代码:
//代码逻辑问题: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;
}
;
#8
suchengjie2013-10-21 15:36
回复 6楼 yuccn
还是和原来的一样,只显示一次
#9
suchengjie2013-10-21 15:37
回复 7楼 潇翊
按照你说的改了,没有任何变化
#10
yuccn2013-10-21 16:27
调试下。
#11
suchengjie2013-10-21 16:41
成员变量cout应该要赋值跟i的最大值一样,还是可以任意赋值
#12
suchengjie2013-10-23 12:04
没有那个大神帮指导一下吗
1