利用LineDDA函數來實現簡單的圖片移動動畫

 在《深入淺出MFC》中看到了LineDDA這個函數,例子是一個字符串從上之下的一個移動,這次稍微改動了一點,講圖像進行移動。

首先我們來看這個函數的解釋:

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
);
其中:
nXStart是運動的起始點的x座標值;
nYStart是運動起點的y座標值;
nXEnd是運動終點的x座標值;
nYEnd是運動終點的y座標值;
lpLineFunc指向回調函數的函數指針;
lpData可以是用戶自定義的數據,例如:CDC或CPaintDC.
作用:該函數先計算出從起點到終點上的每個點的座標,對於每個點都調用一次lpLineFunc對應的回調函數。
  下面我們再介紹下對應回調函數的解釋:
VOID CALLBACK LineDDAProc(
  int X,          // x-coordinate of point
  int Y,          // y-coordinate of point
  LPARAM lpData   // application-defined data
);
其中:
x:點的x座標
y:點的y座標
lpData:就是LineDDA函數的lpData
  講了這麼多,我想是時候給出實現的代碼了。
第一步:在我們的CXView頭文件中聲明LineDDAProc這個回調函數:
注意:最好是將這個函數定義爲static,這樣可以消除系統對該函數添加的this指針。
第二步:定義LineDDAProc這個回調函數:
第三步:在OnDraw中調用函數LineDDA
  說明一下,LineDDA函數的第三個參數也可以是(LPARAM)(LPVOID)pDC。
   好,這樣就實現了我們圖片移動的功能了!寫得很粗糙,有時間再來改一下,這裏仍然有兩個問題存在:
1.在圖片移動的時候,會留下陰影,怎樣去除?
2.CClientDC和CPaintDC到底有什麼區別,在OnDraw()函數中,好像只有使用到CClientDC纔有效的樣子。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章