用VC++ 画运动轨迹 利用moveto lineto 函数 比喻就像是从A点 移动到B点 其中要有一个运动过程。

2024-12-14 18:31:43
推荐回答(4个)
回答1:

一楼的方法能看到效果么?肯定不行,一个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(ii++;
else
KillTimer(1);

回答2:

你试试这个思路:
把A点和B点之间的线段分成若干段,然后利用一个循环,每次画其中的一段,直到已经画到B点为止。大致代码如下:

POINT A;
POINT B;
int iSectionNum = ?;
A.x=???;
A.y=???;
B.x = ???;
B.y= ???;

for (i=0;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);
}

回答3:

else分支里实现,这样图形就具有保持功能要么自定义一个画图的函数在分支里调用 CClientDC dc(this); dc.MoveTo(0,0); dc.LineTo(100,100);

回答4:

//////////////////////////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);