设为首页 加入收藏

TOP

(Visual C++)游戏开发笔记十三:游戏输入消息处理(二)鼠标消息处理 (三)
2014-11-23 20:17:26 】 浏览:1032
Tags:Visual 游戏 开发 笔记 十三 输入 消息 处理 鼠标
//初始化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
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇(Visual C++)游戏开发笔记之十.. 下一篇(Visual C++)游戏开发笔记十五..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目