一楼的方法能看到效果么?肯定不行,一个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
else
KillTimer(1);
你试试这个思路:
把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);
}
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);