//初始化msg while( msg.message!=WM_QUIT ) { if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { tNow = GetTickCount(); if(tNow-tPre >= 40) MyPaint(hdc); } } return msg.wParam; } //****设计一个窗口类,类似填空题,使用窗口结构体********************* ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; 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 = "canvas"; wcex.hIconSm = NULL; return RegisterClassEx(&wcex); } //****初始化函数************************************* // 1.设定飞机初始位置 // 2.设定鼠标光标位置及隐藏 // 3.限制鼠标光标移动区域 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HBITMAP bmp; POINT pt,lt,rb; RECT rect; hInst = hInstance; hWnd = CreateWindow("canvas", "绘图窗口" , 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); bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,648,480,LR_LOADFROMFILE); ship = (HBITMAP)LoadImage(NULL,"ship.bmp",IMAGE_BITMAP,100,148,LR_LOADFROMFILE); bullet = (HBITMAP)LoadImage(NULL,"bullet.bmp",IMAGE_BITMAP,10,20,LR_LOADFROMFILE); //设定鼠标光标的x,y值,并设定飞机贴图坐标的“nowX”和“nowY”的值为(300,300) x = 300; y = 300; nowX = 300; nowY = 300; //设定光标位置 pt.x = 300; pt.y = 300; ClientToScreen(hWnd,&pt); SetCursorPos(pt.x,pt.y); ShowCursor(false); //隐藏鼠标光标 //限制鼠标光标移动区域 GetClientRect(hWnd,&rect); //取得窗口内部矩形 //将矩形左上点坐标存入lt中 lt.x = rect.left; lt.y = rect.top; //将矩形右下坐标存入rb中 rb.x = rect.right; rb.y = rect.bottom; //将lt和rb的窗口坐标转换为屏幕坐标 ClientToScreen(hWnd,<); ClientToScreen(hWnd,&rb); //以屏幕坐标重新设定矩形区域 rect.left = lt.x; rect.top = lt.y; rect.right = rb.x; rect.bottom = rb.y; //限制鼠标光标移动区域 ClipCursor(&rect); MyPaint(hdc); return TRUE; } //****自定义绘图函数********************************* // 1.设定飞机坐标并进行贴图 // 2.设定所有子弹坐标并进行贴图 // 3.显示真正的鼠标光标所在坐标 void MyPaint(HDC hdc) { char str[20] = ""; int i; //贴上背景图 SelectObject(bufdc,bg); BitBlt(mdc,0,0,w,480,bufdc,640-w,0,SRCCOPY); BitBlt(mdc,w,0,640-w,480,bufdc,0,0,SRCCOPY); //计算飞机的贴图坐标,设定每次进行飞机贴图时,其贴图坐标(nowX,nowY)会以10个单位慢慢向鼠标光标所在的目的点(x,y)接近,直到两个坐标相同为止 if(nowX < x) { nowX += 10; if(nowX > x) nowX = x; } else { nowX -=10; if(no |