《逐梦旅程:Windows游戏编程之从零开始》学习笔记之二:GDI框架
标签:成员 rem case 实例句柄 工程 wpa 字符串 依赖 sla
1 //===========================================【程序说明】===================================
2 // 2018_3_5
3 // 描述:实现GDI游戏开发所需要的核心程序
4 //==========================================================================================
5
6 //===========================================【头文件包含部分】=============================
7 // 描述:包含程序所依赖的头文件
8 //==========================================================================================
9
10 #include 11
12 //==============================================【库文件包含部分】==========================
13 // 描述:包含程序所依赖的库文件
14 //==========================================================================================
15
16
17 //=============================================【宏定义】====================================
18 // 描述:定义一些辅助宏
19 //===========================================================================================
20
21 #define WINDOW_WIDTH 800 //为窗口宽度定义的宏,以方便在此处修改窗口宽度
22 #define WINDOW_HEIGHT 600 //为窗口高度定义的宏,以方便在此处修改窗口高度
23 #define WINDOW_TITLE L"【致我们永不磨灭的梦想】GDI程序框架" //为窗口标题定义的宏,以方便在此处修改窗口标题
24
25 //===========================================【全局变量声明】=====================================
26 // 描述:全局变量声明
27 //================================================================================================
28
29 HDC g_hdc = NULL; //全局设备环境句柄
30
31 //================================================【全局函数声明】============================
32 // 描述:全局函数声明,防止“未声明的标识”系列错误
33 //============================================================================================
34
35 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); //窗口过程函数
36
37 BOOL Game_Init(HWND hWnd); //在此函数中进行资源的初始化
38 void Game_Paint(HWND hWnd); //在此函数中进行绘图代码的书写
39 BOOL Game_CleanUp(HWND hWnd); //在此函数中进行资源的清理
40
41 //=================================================【WinMain()函数】==============================
42 // 描述:WINDOW应用程序的入口函数,我们的程序从这里开始
43 //=================================================================================================
44
45 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
46 {
47 //【1】窗口创建四部曲之一:开始设计一个完整的窗口类
48
49 WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX定义一个窗口类
50 wndClass.cbSize = sizeof( WNDCLASSEX ); //设置结构体的字节数大小
51 wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口的样式
52 wndClass.lpfnWndProc = WndProc; //设置只想窗口过程函数的指针
53 wndClass.cbClsExtra = 0; //窗口类的附加内存,取0即可
54 wndClass.cbWndExtra = 0; //窗口的附加内存,取0即可
55 wndClass.hInstance = hInstance; //指定包含窗口过程的程序的实例句柄
56 wndClass.hIcon = (HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); //本地加载自定义ico图标
57 wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //制定窗口类的光标句柄
58 wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个灰色画刷句柄
59 wndClass.lpszMenuName = NULL; //用一个以空终止的字符串,指定菜单资源的名字
60 wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一个以空终止的字符串,指定窗口类的名字
61
62 //HICON hIconSm;
63
64 //【2】窗口常见四部曲之二:注册窗口类
65
66 if(!RegisterClassEx(&wndClass)) //设计完窗口后,需要对窗口类进行注册,这样才能创建该类型的窗口
67 {
68 return -1;
69 }
70
71 //【3】窗口创建四部曲之三:正式创建窗口
72
73 HWND hWnd = CreateWindow(L"ForTheDreamOfGameDevelop",WINDOW_TITLE,
74 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,
75 WINDOW_HEIGHT, NULL, NULL, hInstance, NULL
76 );
77
78 //【4】窗口创建四部曲之四:窗口的移动、显示与更新
79
80 MoveWindow(hWnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true); //调整窗口显示时的位置,使窗口左上角位于(250, 80)处
81
82 ShowWindow(hWnd, nShowCmd); //调用此函数显示窗口
83
84 UpdateWindow(hWnd); //对窗口进行更新,就像我们买了新房装修
85
86 //【5】消息循环过程
87
88 MSG msg = {0}; //定义并初始化msg
89 while (msg.message != WM_QUIT) //使用while循环,如果雄安喜不是WM_QUIT消息,就继续循环
90 {
91 if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) //查看应用程序消息队列,有消息时从队列中的消息派发出去
92 {
93 TranslateMessage(&msg); //将虚拟键消息转换为字符消息
94 DispatchMessage(&msg); //分发一个雄安喜给窗口程序
95 }
96 }
97
98 //【6】窗口类的注销
99
100 UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance); //程序转杯结束,注销窗口类
101
102 return 0;
103 }
104
105 //=========================================【WndProc()函数】=====================================
106 // 描述:窗口过程函数wndproc对敞口消息进行处理
107 //===============================================================================================
108
109 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
110 {
111 PAINTSTRUCT paintStruct; //定义一个PAINTSTRUCT结构体来记录一些绘制信息
112
113 switch(message) //seitch语句开始
114 {
115 case WM_PAINT: // 若是客户区重绘消息
116 g_hdc = BeginPaint(hWnd, &paintStruct); //指定窗口进行绘制工作的准备,并用将和绘图有关的信息填充到paintStruct结构体中
117 Game_Paint(hWnd);
118 EndPaint(hWnd, &paintStruct); //paintStruct函数标记制定窗口的绘画过程结束
119 ValidateRect(hWnd, NULL); // 更新客户区的显示
120 break;
121
122 case WM_KEYDOWN: // 若是键盘按下消息
123 if(wParam == VK_ESCAPE) // 如果被按下的键是ESC
124 {
125 DestroyWindow(hWnd); // 销毁窗口, 并发送一条WM_DESTROY消息
126
127 }
128 break;
129
130 case WM_DESTROY: //若是窗口销毁消息
131 Game_CleanUp(hWnd);//调用自定义的资源清理函数Game_CleanUp()进行退出前的资源清理
132 PostQuitMessage(0); //向系统表明有个线程有终止请求。用来响应WM_DESTROY消息
133 break;
134
135 default: //若上述case条件都不符合,则执行该default语句
136 return DefWindowProc(hWnd, message, wParam, lParam); //调用缺省的窗口过程
137 }
138
139 return 0; //正常退出
140 }
141
142 //========================================【Game_Init()函数】=====================================
143 // 描述:初始化函数,进行一些简单的初始化
144 //================================================================================================
145
146 BOOL Game_Init(HWND hWnd) //在此函数中进行资源的初始化
147 {
148 g_hdc = GetDC(hWnd); //获取设设备环境句柄
149 Game_Paint(hWnd);
150 ReleaseDC(hWnd, g_hdc); //释放设备环境
151 return TRUE;
152 }
153
154 //========================================【Game_Paint()函数】====================================
155 // 描述:绘制函数,在此函数中进行绘制操作
156 //================================================================================================
157
158 void Game_Paint(HWND hWnd) //在此函数中进行绘图代码的书写
159 {
160
161 }
162
163 //========================================【Game_CleanUp()函数】==================================
164 // 描述:资源清理函数,在此函数中进行退出前资源的清理工作
165 //================================================================================================
166
167 BOOL Game_CleanUp(HWND hWnd)
168 {
169 return TRUE;
170 }
并添加相应资源图片到工程文件夹中。
《逐梦旅程:Windows游戏编程之从零开始》学习笔记之二:GDI框架
标签:成员 rem case 实例句柄 工程 wpa 字符串 依赖 sla
原文地址:https://www.cnblogs.com/WinonaJia/p/8511950.html
评论