Instance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void MyPaint(HDC hdc); //****WinMain函数,程序入口点函数************************************** * int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; MyRegisterClass(hInstance); //初始化 if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } //消息循环 GetMessage(&msg,NULL,NULL,NULL); //初始化msg while( msg.message!=WM_QUIT ) { if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { tNow = GetTickCount(); if(tNow-tPre >= 50) MyPaint(hdc); } } return msg.wParam; } //****设计一个窗口类,类似填空题,使用窗口结构体********************* ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = NULL; wcex.hCursor = NULL; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = 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,750,420,true); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); hdc = GetDC(hWnd); mdc = CreateCompatibleDC(hdc); bufdc = CreateCompatibleDC(hdc); bmp = CreateCompatibleBitmap(hdc,750,400); SelectObject(mdc,bmp); bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,750,400,LR_LOADFROMFILE); angrybird = (HBITMAP)LoadImage(NULL,"angrybird.bmp",IMAGE_BITMAP,140,70,LR_LOADFROMFILE); GetClientRect(hWnd,&rect); MyPaint(hdc); return TRUE; } //****自定义绘图函数********************************* // 1.窗口贴图 // 2.根据小球的运动状态计算速度与贴图坐标 void MyPaint(HDC hdc) { SelectObject(bufdc,bg); BitBlt(mdc,0,0,750,400,bufdc,0,0,SRCCOPY); SelectObject(bufdc,angrybird); BitBlt(mdc,x,y,70,70,bufdc,70,0,SRCAND); BitBlt(mdc,x,y,70,70,bufdc,0,0,SRCPAINT); BitBlt(hdc,0,0,750,400,mdc,0,0,SRCCOPY); x += vx; //计算X轴方向贴图坐标,每调用一次MyPiant(),x坐标就加上一个vx的当前值 vy = vy + gy; //计算Y轴方向速度分量,vy随着每一次MyPiant()函数的调用就加上一个gy(重力加速度) y += vy; //计算Y轴方向贴图坐标,每调用一次MyPiant(),y坐标就加上一个刚改变过后的vy,相当于加速运动 if(y >= rect.bottom-70) //判断是否触地,如果触碰到窗口边界,进行调整 { y = rect.bottom - 70; //X轴方向的摩擦力处理 vx += fx; // vx=fx+vx;这里fx为负 |