BOOL LineDDA( int nXStart, // x-coordinate of starting point
int nYStart, // y-coordinate of starting point
int nXEnd, // x-coordinate of ending point
int nYEnd, // y-coordinate of ending point
LINEDDAPROC lpLineFunc, // callback function
LPARAM lpData // application-defined data);
这个函数做动画十分方便,你可以利用前4个参数指定屏幕上任意2点的(x,y)坐标,此函数将以Bresenham算法计算出通过2点之直线中的每一个屏幕像素坐标;
每计算出一个坐标,就通知由LineDDA第五个参数所指定的callback函数。这个callback函数的类型必须是:
VOID CALLBACK LineDDAProc( int X, // x-coordinate of point
int Y, // y-coordinate of point
LPARAM lpData // application-defined data);
通常我们在这个callback函数中设计绘图操作。玩过windows的接龙游戏吗?接龙成功后扑克牌的跳动效果就可以利用LineDDA完成。虽然扑克牌的跳动路径是一条曲线,
但将曲线拆成数条直线并不困难。LineDDA的第六个参数可以视应用程序的需要传递一个32位指针,下面的例子中传递的就是一个DC。
函数原型:
static VOID CALLBACK LineDDAProc(
int X, // x-coordinate of point
int Y, // y-coordinate of point
LPARAM lpData // application-defined data
);