读书人

OnTimer()函数有关问题

发布时间: 2013-10-25 14:36:53 作者: rapoo

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]这条直线动态的变短。现在的问题是这条直线只是变一次而已,而不是每循环一次变一次。
[解决办法]
去掉 KillTimer(0);

引用:
我在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]这条直线动态的变短。现在的问题是这条直线只是变一次而已,而不是每循环一次变一次。

[解决办法]
引用:
Quote: 引用:

全局变量
int ii=0;
……
ii++;if (ii>=50) ii=0;
{
if(this->demdata->data != NULL)
this->demdata->data[300][400]-=ii*100;//这里原来的i要改为ii
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);



这个跟4楼提出的有什么区别呢

KillTime(0);被注释掉了
[解决办法]
引用:
Quote: 引用:

你没有试让其变长呢, 估计你第一个画的是最长的线, 然后又画短线, 但是以前的长线又没有擦除, 当然就看不到效果.

你确认绘图前你擦掉原来的图了吗

按照你说的让其变长,效果也是一样只有一次变化



那就是执行得太快了.

你既然使用了timer, 那就要让timer起作用, timer多次绘制.

注意, 如果没有擦除, 仍然 让它变长.

void XXXX::OnTimer(XXXXX)
{
static int i=0; //注意这里附近的两句
if(i<50)//画满50次前
{
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;
++i; //这里增加i
}
else//画满50次后
{
KillTimer(0); //这里才结果定时器.
}

CMainFrame *pMainFrm=(CMainFrame *)AfxGetMainWnd();
CMDIChildWnd *pChild = pMainFrm->MDIGetActive();
CLAIBINView *pView=(CLAIBINView*)pChild->GetActiveView();
if(maploadok)pView->mapopen((this->demdata));
//注意, 没有killtimer
}

读书人网 >C++

热点推荐