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);
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