本文展示四種經典 2D 圖形顯示特效,皆以 CDC::BitBlt 逐像素或逐條帶複製記憶體裝置內容(memdc)至螢幕裝置(pDC),並搭配 Sleep 控制動畫速度。
CDC memdc; CBitmap m_bitmap;IDB_BITMAP1m_bitmap.LoadBitmap(IDB_BITMAP1);OnDraw 中建立相容 DC 並選入點陣圖// 向左掃描
for (int i = 0; i < width; i++) {
pDC->BitBlt(i, 0, 1, height, &memdc, i, 0, SRCCOPY);
Sleep(1);
}
// 向右掃描
for (int i = width - 1; i >= 0; i--) {
pDC->BitBlt(i, 0, 1, height, &memdc, i, 0, SRCCOPY);
Sleep(1);
}
int num = width / 20; // 每條 20 像素寬
for (int i = 0; i < 20; i++) {
for (int j = 0; j < num; j++) {
pDC->BitBlt(j * 20 + i, 0, 1, height, &memdc, j * 20 + i, 0, SRCCOPY);
}
Sleep(10);
}
int num = height / 20;
for (int i = 0; i < 20; i++) {
for (int j = 0; j < num; j++) {
pDC->BitBlt(0, j * 20 + i, width, 1, &memdc, 0, j * 20 + i, SRCCOPY);
}
Sleep(10);
}
for (int i = height - 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
pDC->BitBlt(0, j, width, 1, &memdc, 0, i, SRCCOPY);
Sleep(10);
}
}
GetTickCount 或多媒體計時器替代 Sleep,獲得更平滑幀率