声明

1
2
3
HDC hdc, mdc, bufdc;
HBITMAP fullmap, hBgBmp, hRoleBmp[10][100], _hRoleBmp[10][100];
BITMAP bgBmp, roleFlyBmp[10][100], _roleFlyBmp[10][100];

初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
bufdc = CreateCompatibleDC(hdc);
fullmap = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);
SelectObject(mdc, fullmap);

hBgBmp = (HBITMAP)LoadImage(NULL, "bg.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hBgBmp, sizeof(BITMAP), &bgBmp);

// 循环加载所有图片
int i, j;
char actionName[10][20] = { "startfly", "fly", "fly2", "attack", "attack2" };
for (i = 0; i < 5; i++)
{
char fullName[100];
for (j = 0; j < 5; j++)
{
sprintf(fullName, "%s%d.bmp", actionName[i], j);
hRoleBmp[i][j] = (HBITMAP)LoadImage(NULL, fullName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // 原图

sprintf(fullName, "_%s%d.bmp", actionName[i], j);
_hRoleBmp[i][j] = (HBITMAP)LoadImage(NULL, fullName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // 掩图

GetObject(hRoleBmp[i][j], sizeof(BITMAP), &roleFlyBmp[i][j]);
}
}

绘图

1
2
3
4
5
6
7
8
9
10
SelectObject(bufdc, hBgBmp);
BitBlt(mdc, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, bufdc, 0, 0, SRCCOPY); // 画背景到mdc

SelectObject(bufdc, _hRoleBmp[action][actionFrame]);
BitBlt(mdc, OX, OY, roleFlyBmp[action][actionFrame].bmWidth, roleFlyBmp[action][actionFrame].bmHeight, bufdc, 0, 0, SRCAND); // 画人物[掩图]到mdc

SelectObject(bufdc, hRoleBmp[action][actionFrame]);
BitBlt(mdc, OX, OY, roleFlyBmp[action][actionFrame].bmWidth, roleFlyBmp[action][actionFrame].bmHeight, bufdc, 0, 0, SRCPAINT);

BitBlt(hdc, 0, 0, WIDTH, HEIGHT, mdc, 0, 0, SRCCOPY); // 画mdc到hdc