|
|
//***********************************
// 消息循环
//***********************************
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc,hdc2;
static HINSTANCE hInstance ;
PAINTSTRUCT ps ;
int iLength ;
//static HDC hdcMem,hdcMemBuf ;
static HBITMAP hBitmap;//,hbitmap2 ;
static int cxClient, cyClient, cxSource, cySource ,x=0,y=0;
BITMAP bitmap ;
TCHAR szAppName[] = TEXT("you are better man") ;
TCHAR name3[] = TEXT("xman") ;
TCHAR szBuffer[40];
switch (message)
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) ;
return 0;
//刷屏消息
case WM_PAINT:
//刷新屏幕方法1:
//hdc = GetDC(hwnd);
hdc = BeginPaint (hwnd, &ps) ;
Draw(hdc,hwnd,hBitmap,&x,&y);
EndPaint (hwnd, &ps) ;
return 0;
//按键消息
case WM_KEYDOWN:
switch(wParam)
{
case VK_UP:
y-=5;
pkey = TEXT("上");
InvalidateRect (hwnd,NULL,FALSE) ;
break;
case VK_DOWN:
y+=5;
pkey = TEXT("下");
InvalidateRect (hwnd,NULL,FALSE) ;
break;
case VK_RIGHT:
x+=5;
pkey = TEXT("左");
InvalidateRect (hwnd,NULL,FALSE) ;
break;
case VK_LEFT:
x-=5;
pkey = TEXT("右");
InvalidateRect (hwnd,NULL,FALSE) ;
break;
}
return 0;
case WM_DESTROY:
DeleteObject (hBitmap) ;
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
void Draw(HDC hdc,HWND hwnd,HBITMAP hBitmap,int* x,int* y)
{
static HDC hdcMem,hdcMemBuf ;
static HBITMAP hbitmap2 ;
static RECT rect ;
//建立内存兼容设备1
hdcMem = CreateCompatibleDC (hdc) ;
//内存兼容背景位图,位图大小与客户区域大小相同
hbitmap2 = CreateCompatibleBitmap(hdc, 550, 550 );
//建立内存设备兼容2
hdcMemBuf = CreateCompatibleDC( NULL );
//将内存兼容背景位图选入内存设备兼容1
SelectObject( hdcMem, hbitmap2 );
//用背景色刷一下内存兼容设备1
GetClientRect(hwnd, &rect );
FillRect(hdcMem, &rect, NULL );
//将要贴上去的图内存设备兼容2
SelectObject(hdcMemBuf, hBitmap);
//将第二个内存DC上的贴图画到第一内存DC上的内存背景上
BitBlt (hdcMem, *x, *y, 550, 550, hdcMemBuf, 0, 0, SRCCOPY) ;
//最后画到目的 DC 上
BitBlt( hdc, 0, 0, 550, 550, hdcMem, 0, 0, SRCCOPY );
DeleteDC( hdcMemBuf );
DeleteObject (hbitmap2) ;
DeleteDC (hdcMem) ;
}
帮忙看下感激不禁 |
|