Visual C++ 游戏开发案例实践代码2.1 HelloWorld代码
2.1 HelloWorld代码
1 #include <windows.h> //一个windows应用程序应该包含的头文件(笔者认为这就是SDK风格的windows应用程序了) 2 #include <stdio.h> //标准输入输出流文件 3 4 //声明一个回调函数 5 LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lparam); 6 //窗口句柄,窗口消息 7 8 //创建一个完整的窗口需要经过四个步骤:设计一个窗口类;注册窗口类;创建窗口;显示及更新窗口 9 //WinMain:Windows 程序的入口函数 10 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 11 { //hInstance 实例句柄、hPrevInstance默认这个参数为NULL、lpCmdLine存储一个命令行参数 12 13 WNDCLASS wndcls; //定义一个窗口对象 14 wndcls.cbClsExtra = 0; //指定额外内存空间 15 wndcls.cbWndExtra = 0; //指定额外内存空间 16 wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //指定窗口背景颜色 17 wndcls.hCursor = LoadCursor(NULL, IDC_CROSS); //设置光标样式 18 wndcls.hIcon = LoadIcon(NULL, IDI_ERROR); //设置图标样式 19 wndcls.hInstance = hInstance; //指定窗口实例句柄 20 wndcls.lpfnWndProc = WinSunProc; //指定窗口函数、窗口主处理函数 21 wndcls.lpszClassName = "Visual C++ Game"; //窗口类名称 22 wndcls.lpszMenuName = NULL; //菜单 23 wndcls.style = CS_HREDRAW | CS_VREDRAW; 24 RegisterClass(&wndcls); //注册窗口类 25 HWND hwnd; //声名窗口句柄 26 27 //创建窗口,但是这里的窗口是不会显示的 28 hwnd = CreateWindow 29 ("Visual C++ Game", // 已注册窗口类的名称 30 "Visual C++ 游戏开发", //窗口标题 31 WS_OVERLAPPEDWINDOW, //窗口风格 32 200, //窗口位置的横坐标 33 200, //窗口位置的纵坐标 34 600, //窗口宽度 35 400, //窗口高度 36 NULL, 37 NULL, 38 hInstance, //实例句柄 39 NULL 40 ); 41 ShowWindow(hwnd, SW_SHOWNORMAL); 42 UpdateWindow(hwnd); //更新显示 43 //初始化完成后,WinMain进入消息循环 44 MSG msg; 45 while (GetMessage(&msg, NULL, 0, 0)) 46 { 47 TranslateMessage(&msg); //转换键盘消息 48 DispatchMessage(&msg); //分派消息 49 } 50 return 0; 51 } 52 //窗口函数,窗口函数通常利用switch/case 方式判断消息的种类,以决定处置方式,由于其被Windows 系统所调用的,所以这是一种call back 函数 53 LRESULT CALLBACK WinSunProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 54 { 55 switch (uMsg) //判断消息类型 56 { 57 case WM_PAINT: //更新窗口消息 58 HDC hDC; //定义 hDC 设备 59 PAINTSTRUCT ps; 60 hDC = BeginPaint(hwnd, &ps); //得到设备hDC 61 TextOut(hDC, 200, 0, "Visual C++ 游戏开发", strlen("Visual C++ 游戏开发")); 62 EndPaint(hwnd, &ps); 63 break; 64 case WM_CLOSE: //当单击关闭按钮时,产生关闭消息 65 if (IDYES == MessageBox(hwnd, "是否真的结束?","游戏开发", MB_YESNO)) 66 { 67 DestroyWindow(hwnd); //单击“确认”按钮,销毁窗口 68 } 69 break; 70 case WM_DESTROY: //销毁窗口消息 71 PostQuitMessage(0); //退出程序 72 break; 73 default: 74 return DefWindowProc(hwnd, uMsg, wParam,lParam); 75 //在default 处必须调用DefWindowProc,这是Windows内部默认的消息处理函数 76 } 77 return 0; 78 }