typedef void (CALLBACK* LINEDDAPROC)(int, int, LPARAM);LineDDACallback函数
申明:static VOID CALLBACK LineDDACallback(int,int,LPARAM);
定义:
VOID CALLBACK CMyFrameWnd::LineDDACallback(int x, int y, LPARAM lpdc)
      { 
          static char szText[] = "Hello, MFC";
          ((CDC*)lpdc)->TextOut(x, y, szText, sizeof(szText)-1);
          for(int i=1; i<50000; i++); // 纯粹是为了延迟下降速度,以利观察
      }调用:::LineDDA(rect.right/2, 0, rect.right/2, rect.bottom/2,
             (LINEDDAPROC) LineDDACallback, (LPARAM) (LPVOID) &dc);
没有什么地方看见给LineDDACallback函数传参数,这样怎么能调用?
x和y的值从哪里得到?

解决方案 »

  1.   

    x, y 的值是LineDDA 函数中计算得到的. 不是你指定的.  LineDDA 计算直线上的每一点,然后用这个点的X,Y 坐标值来调用你给出的回调函数.另,延迟最好 Sleep(ms)一下,
      

  2.   

    系统回调函数是由系统调用的,系统根据DDA直线算法计算起始点到结束点的每一个屏幕点,每次使用计算得到的x,y值调用LineDDACallBack()回调函数,传入的就是x,y值。LineDDACallBack()函数指针是由你调用LineDDA函数时设定的。