读书人

急用win32项目敲得一段代码想实现一

发布时间: 2013-09-05 16:02:07 作者: rapoo

急!!!!!!用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;

读书人网 >C++

热点推荐