用VC++ 画运动轨迹 利用moveto lineto 函数 比喻就像是从A点 移动到B点 其中要有一个运动过程。
如上所述。。。谢谢网上看到很多人推荐使用ontimer刷新的方式来处理这个也许会简单一点按照一楼的做法对于很长的线段(不一定是一条直线的情况)整个过程将会很麻烦虽然可行、...
如上所述。。。谢谢
网上看到 很多人推荐使用ontimer 刷新的方式来处理 这个也许会简单一点 按照一楼的做法 对于很长的线段(不一定是一条直线的情况) 整个过程将会很麻烦 虽然可行、、
我想知道的是怎样加入ontime 这个刷新函数、、、、 展开
网上看到 很多人推荐使用ontimer 刷新的方式来处理 这个也许会简单一点 按照一楼的做法 对于很长的线段(不一定是一条直线的情况) 整个过程将会很麻烦 虽然可行、、
我想知道的是怎样加入ontime 这个刷新函数、、、、 展开
4个回答
展开全部
一楼的方法能看到效果么?肯定不行,一个for循环下来,执行速度非常快,你根本看不到中间的变化,直接看到结果,一条从A到B的线。
利用class wiard加入对WM_TIMER消息的处理就行了,IDE为会你生成一个处理函数OnTimer。然后在初始化函数里SetTimer(1, 500,NULL);第一个参数表示定时器编号,用以区别一个程序的多个定时器。第二个参数表示定时间隔时间,以毫秒为单位。
最后你在OnTimer函数里写上(iSectionNum表示分多少步画完)
CClientDC dc(this); //也可以存为一个成员变量,这样就不用每次生成
dc.MoveTo( A.x+(B.x-A.x)*i/iSectionNum, A.y+(B.y-A.y)*i/iSectionNum);
dc.LineTo( A.x+(B.x-A.x)*(i+1)/iSectionNum, A.y+(B.y-A.y)*(i+1)/iSectionNum);
if(i<iSectionNum)
i++;
else
KillTimer(1);
利用class wiard加入对WM_TIMER消息的处理就行了,IDE为会你生成一个处理函数OnTimer。然后在初始化函数里SetTimer(1, 500,NULL);第一个参数表示定时器编号,用以区别一个程序的多个定时器。第二个参数表示定时间隔时间,以毫秒为单位。
最后你在OnTimer函数里写上(iSectionNum表示分多少步画完)
CClientDC dc(this); //也可以存为一个成员变量,这样就不用每次生成
dc.MoveTo( A.x+(B.x-A.x)*i/iSectionNum, A.y+(B.y-A.y)*i/iSectionNum);
dc.LineTo( A.x+(B.x-A.x)*(i+1)/iSectionNum, A.y+(B.y-A.y)*(i+1)/iSectionNum);
if(i<iSectionNum)
i++;
else
KillTimer(1);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你试试这个思路:
把A点和B点之间的线段分成若干段,然后利用一个循环,每次画其中的一段,直到已经画到B点为止。大致代码如下:
POINT A;
POINT B;
int iSectionNum = ?;
A.x=???;
A.y=???;
B.x = ???;
B.y= ???;
for (i=0;i<iSectionNum; i++)
{
MoveToEx(hdc, A.x+(B.x-A.x)*i/iSectionNum, A.y+(B.y-A.y)*i/iSectionNum, NULL);
LineTo(hdc, A.x+(B.x-A.x)*(i+1)/iSectionNum, A.y+(B.y-A.y)*(i+1)/iSectionNum, NULL);
}
把A点和B点之间的线段分成若干段,然后利用一个循环,每次画其中的一段,直到已经画到B点为止。大致代码如下:
POINT A;
POINT B;
int iSectionNum = ?;
A.x=???;
A.y=???;
B.x = ???;
B.y= ???;
for (i=0;i<iSectionNum; i++)
{
MoveToEx(hdc, A.x+(B.x-A.x)*i/iSectionNum, A.y+(B.y-A.y)*i/iSectionNum, NULL);
LineTo(hdc, A.x+(B.x-A.x)*(i+1)/iSectionNum, A.y+(B.y-A.y)*(i+1)/iSectionNum, NULL);
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
else分支里实现,这样图形就具有保持功能要么自定义一个画图的函数在分支里调用 CClientDC dc(this); dc.MoveTo(0,0); dc.LineTo(100,100);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//////////////////////////H文件中//////////////////////////
afx_msg void OnTimer(UINT nIDEvent);
////////////////////////CPP文件中/////////////////////////
BEGIN_MESSAGE_MAP(CTemperatureUpdateDlg, CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()
void CMyDialog::OnTimer(UINT nIDEvent)
{
if (nIDEvent == 0)
{
}
CDialog::OnTimer(nIDEvent);
}
///////////////////设置定时器//////////////////////
SetTimer(0, 1000, NULL);
///////////////////关闭定时器//////////////////////
KillTimer(0);
afx_msg void OnTimer(UINT nIDEvent);
////////////////////////CPP文件中/////////////////////////
BEGIN_MESSAGE_MAP(CTemperatureUpdateDlg, CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()
void CMyDialog::OnTimer(UINT nIDEvent)
{
if (nIDEvent == 0)
{
}
CDialog::OnTimer(nIDEvent);
}
///////////////////设置定时器//////////////////////
SetTimer(0, 1000, NULL);
///////////////////关闭定时器//////////////////////
KillTimer(0);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询