2) 获取消息,GetMessage与PeekMessage:
BOOL GetMessage( LPMSG lpMsg, // message information HWND hWnd, // handle to window UINT wMsgFilterMin, // first message UINT wMsgFilterMax // last message ); BOOL PeekMessage( LPMSG lpMsg, // message information HWND hWnd, // handle to window UINT wMsgFilterMin, // first message UINT wMsgFilterMax, // last message UINT wRemoveMsg // removal options );两者都是从消息队列中取消息,不同的是当消息队列为空时,两者的处理方式不一样,前者是等待,后者是继续执行。由于我们的游戏需要不断的更新和重绘,而不能等待,所以我们要选择后者。
3)翻译消息TranslateMessage
将消息翻译成可处理的格式。
BOOL TranslateMessage( CONST MSG *lpMsg // message information );4)转发消息DispatchMessage
将消息转发给窗口过程。
LRESULT DispatchMessage( CONST MSG *lpmsg // message information );
6.窗口过程WinProc
用户处理消息的函数,该函数在消息循环中被系统函数所调用。该函数的结构必须与下面这个函数类型相同!名称可以不同。
LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter );
7.例:创建窗口
#include <Windows.h> //窗口过程 LRESULT CALLBACK WndProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { switch(uMsg) { case WM_DESTROY://窗口销毁消息。按下窗口的叉时会产生。 PostQuitMessage(0);//发送退出程序消息WM_QUIT。 break; case WM_LBUTTONDOWN: MessageBox(hwnd,L"正处理鼠标左键单击消息",L"这是标题",MB_OK); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam);//调用默认窗口过程 } return 0; } //主函数 int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ) { //MessageBox(NULL,L"这是消息框",L"这是标题",MB_OKCANCEL); WNDCLASSEX wcx;//窗口类 memset(&wcx,0,sizeof(WNDCLASSEX)); wcx.cbSize = sizeof(WNDCLASSEX);//窗口类大小 wcx.style = CS_CLASSDC;//窗口类风格 wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//获得系统画刷(白色) wcx.hCursor = LoadCursor(NULL,IDC_HAND);//加载系统光标 wcx.hIconSm = wcx.hIcon = LoadIcon(NULL,IDI_APPLICATION);//加载系统图标 wcx.hInstance = hInstance;//应用程序实例句柄 /*字符串前面‘L’的意思是,该字符串为Unicode编码格式, 不是默认的ASCII格式。如果要改成ASII格式,可以修改项目属性。*/ wcx.lpszClassName = L"WndClass";//窗口类名称 wcx.lpfnWndProc = (WNDPROC)WndProc;//窗口过程 //注册窗口类 RegisterClassEx( &wcx ); //窗口过程 HWND hWnd = CreateWindowEx(0,L"WndClass",L"这是窗口标题", WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 0,0,640,480,NULL,NULL,hInstance,NULL); //显示窗口 ShowWindow(hWnd,SW_SHOWNORMAL); //更新窗口,即发送重绘消息 UpdateWindow(hWnd); MSG message;//消息结构 while(true) { //从消息队列中取消息 if(PeekMessage(&message,NULL,0,0,PM_REMOVE)) { if (message.message == WM_QUIT)//跳出循环,退出程序。 { break; } //翻译消息 TranslateMessage(&message); //发送给窗口过程 DispatchMessage(&message); } Sleep(1);//暂停ms,即放弃CPU时间片ms,避免浪费CPU。 } return 0; }8.使用VS2008-VC9创建Win32应用程序
菜单:文件->新建->项目,在弹出的对话框中选Win32项目,截图如下:
输入名称,选择好路径后,点确定,然后再点下一步,来到如下步骤,