ame = NULL; wcex.lpszClassName = "maple"; wcex.hIconSm = NULL; return RegisterClassEx(&wcex); } //****初始化函数************************************* // 1.加载位图资源 // 2.取得内部窗口区域信息 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HBITMAP bmp; hInst = hInstance; hWnd = CreateWindow("maple", "浅墨的绘图窗口" , WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } MoveWindow(hWnd,10,10,600,450,true); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); hdc = GetDC(hWnd); mdc = CreateCompatibleDC(hdc); bufdc = CreateCompatibleDC(hdc); bmp = CreateCompatibleBitmap(hdc,640,480); SelectObject(mdc,bmp); bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE); angrybird = (HBITMAP)LoadImage(NULL,"angrybird.bmp",IMAGE_BITMAP,120,60,LR_LOADFROMFILE); GetClientRect(hWnd,&rect); SelectObject(bufdc,bg); BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY); MyPaint(hdc); return TRUE; } //****自定义绘图函数********************************* // 1.窗口贴图 // 2.计算小球速度,坐标以及判断是否碰到窗口下缘 void MyPaint(HDC hdc) { SelectObject(bufdc,bg); BitBlt(mdc,0,0,640,480,bufdc,0,0,SRCCOPY); SelectObject(bufdc,angrybird); BitBlt(mdc,x,y,60,60,bufdc,60,0,SRCAND); BitBlt(mdc,x,y,60,60,bufdc,0,0,SRCPAINT); BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY); x += vx; //计算X轴方向贴图坐标,每调用一次MyPiant(),x坐标就加上一个恒定不变的vx,相当于匀速运动 vy = vy + gy; //计算Y轴方向速度分量,vy随着每一次MyPiant()函数的调用就加上一个gy(重力加速度) y += vy; //计算Y轴方向贴图坐标,每调用一次MyPiant(),y坐标就加上一个刚改变过后的vy,相当于加速运动 //判断是否触地,如果触碰到窗口边界,vy调整为相反方向 if(y >= rect.bottom-60) { y = rect.bottom - 60; vy = -vy; } tPre = GetTickCount(); //记录上次的绘图时间 } //****消息处理函数*********************************** LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_KEYDOWN: //按键消息 if(wParam==VK_ESCAPE) //按下【Esc】键 PostQuitMessage(0); break; case WM_DESTROY: //窗口结束消息 DeleteDC(mdc); DeleteDC(bufdc); DeleteObject(bg); DeleteObject(angrybird); ReleaseDC(hWnd,hdc); PostQuitMessage(0); break; default: //其他消息 return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } #include "stdafx.h" #include
//全局变量声明 HINSTANCE hInst; HBITMAP bg,angrybird; HDC hdc,mdc,bufdc; HWND hWnd; DWORD tPre,tNow,tCheck; RECT rect; int x=0,y=100,vx=6,vy=0,gy=3; //初始横坐标x=0,初始纵坐标y=100,初始水平方向速度vx=6, //初始竖直方向速度vy=0,重力加速度gy=3(这里为了方便演示,我们设置为3)
//全局函数声明 ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void MyPaint(HDC hdc);
//****WinMain函数,程序入口点函数************************************** int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, |