OnTimer()函数有关问题
OnTimer()函数问题我在View类的OnCreate中加入一个定时器SetTimer(0,100,NULL),然后再View类的OnTimer函数
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);
[解决办法]KillTime(0);被注释掉了
[解决办法]
你没有试让其变长呢, 估计你第一个画的是最长的线, 然后又画短线, 但是以前的长线又没有擦除, 当然就看不到效果.
你确认绘图前你擦掉原来的图了吗
按照你说的让其变长,效果也是一样只有一次变化
那就是执行得太快了.
你既然使用了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
}