急!!!!!!用win32项目敲得一段代码,想实现一个人的走路功能,总报错说我的hdc未声明是怎么回事
现在这段代码只写了up键
这是全局变量:
HINSTANCE hInst;
TCHAR szTitle[MAX_LOADSTRING];
TCHAR szWindowClass[MAX_LOADSTRING];
HBITMAP girl[4],bg;
HDC hdc,mdc,bufdc;
HWND hWnd;
DWORD tPre,tNow;
int num,dir,x,y;
————————————————————————————————————————————————
下面是几段改过的函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_KEYDOWN:
switch(wParam){
case VK_UP:
switch(dir){
case 0:
y -= 10;
break;
case 1:
x -=1;
y -=8;
break;
case 2:
x += 2;
y -= 10;
break;
case 3:
x += 2;
y -= 10;
break;
}
if(y<0)
y = 0;
dir = 0;
break;
}
case WM_DESTROY:
int i;
DeleteDC(mdc);
DeleteDC(bufdc);
for(i = 0;i < 4;i ++)
DeleteObject(girl[i]);
DeleteObject(bg);
ReleaseDC(hWnd,hdc);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
————————————————————————————————————————————————
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
HBITMAP bmp;
hInst = hInstance; // 将实例句柄存储在全局变量中
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
MoveWindow(hWnd,10,10,640,480,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
bufdc = CreateCompatibleDC(hdc);
bmp = CreateCompatibleBitmap(hdc,640,480);
SelectObject(mdc,bmp);
x = 300;
y = 250;
dir = 0;
num = 0;
girl[0] = (HBITMAP)LoadImage(NULL,_T("E:\\project\\Ancient_01\\photo\\人物.bmp"),IMAGE_BITMAP,440,180,LR_LOADFROMFILE);
girl[1] = (HBITMAP)LoadImage(NULL,_T("E:\\project\\Ancient_01\\photo\\人物.bmp"),IMAGE_BITMAP,424,154,LR_LOADFROMFILE);
girl[2] = (HBITMAP)LoadImage(NULL,_T("E:\\project\\Ancient_01\\photo\\人物.bmp"),IMAGE_BITMAP,480,148,LR_LOADFROMFILE);
girl[3] = (HBITMAP)LoadImage(NULL,_T("E:\\project\\Ancient_01\\photo\\人物.bmp"),IMAGE_BITMAP,480,148,LR_LOADFROMFILE);
bg = (HBITMAP)LoadImage(NULL,_T("E:\\project\\Ancient_01\\photo\\地图.bmp"),IMAGE_BITMAP,640,480,LR_LOADFROMFILE);
MyPaint(hdc);
return TRUE;
}
————————————————————————————————————————————————
void MyPaint(HDC hdc){
int w,h;
SelectObject(bufdc,bg);
BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY);
SelectObject(bufdc,girl[dir]);
switch(dir){
case 0:
w = 55;
h = 74;
break;
case 1:
w = 53;
h = 77;
break;
case 2:
w = 60;
h = 74;
break;
case 3:
w = 60;
h = 74;
break;
}
BitBlt(mdc,x,y,w,h,bufdc,num*w,h,SRCAND);
BitBlt(mdc,x,y,w,h,bufdc,num*w,0,SRCPAINT);
BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY);
tPre = GetTickCount();
num++;
if(num = 8)
num = 0;
}
win32
[解决办法]
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
HBITMAP bmp;
HDC hdc;