1 //============================【程序说明】=================================
2 // 2017 12 20
3 // by 第二根杈
4 // 描述:用代码勾勒出游戏开发所需要的程序框架
5 //========================================================================
6
7 //==============================【头文件包含部分】============================
8 // 描述:包含程序所依赖的头文件
9 //============================================================================
10
11 #include <Windows.h>
12
13 //================================【宏定义】===============================
14 // 描述:定义一些辅助宏
15 //============================================================================
16
17 #define WINDOW_WIDTH 800 //为窗口宽度定义的宏,以方便在此处修改窗口宽度
18 #define WINDOW_HEIGHT 600 //为窗口高度定义的宏,以方便在此处修改窗口高度
19 #define WINDOW_TITLE L"【至我们永不磨灭的梦想】程序核心框架" //为窗口标题定义的宏,以方便在此处修改窗口标题
20
21 //================================【全局函数声明】==========================
22 // 描述:全局函数声明,防止“未声明的标识”系列错误
23 //============================================================================
24
25 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); //窗口过程函数
26
27 //=====================================【WinMain()函数】========================
28 // 描述:WINDOW应用程序的入口函数,我们的程序从这里开始
29 //===========================================================================
30
31 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
32 {
33 //【1】窗口创建四部曲之一:开始设计一个完整的窗口类
34
35 WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX定义一个窗口类
36 wndClass.cbSize = sizeof( WNDCLASSEX ); //设置结构体的字节数大小
37 wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口的样式
38 wndClass.lpfnWndProc = WndProc; //设置只想窗口过程函数的指针
39 wndClass.cbClsExtra = 0; //窗口类的附加内存,取0即可
40 wndClass.cbWndExtra = 0; //窗口的附加内存,取0即可
41 wndClass.hInstance = hInstance; //指定包含窗口过程的程序的实例句柄
42 wndClass.hIcon = (HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); //本地加载自定义ico图标
43 wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //制定窗口类的光标句柄
44 wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个灰色画刷句柄
45 wndClass.lpszMenuName = NULL; //用一个以空终止的字符串,指定菜单资源的名字
46 wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一个以空终止的字符串,指定窗口类的名字
47
48 //HICON hIconSm;
49
50 //【2】窗口常见四部曲之二:注册窗口类
51
52 if(!RegisterClassEx(&wndClass)) //设计完窗口后,需要对窗口类进行注册,这样才能创建该类型的窗口
53 {
54 return -1;
55 }
56
57 //【3】窗口创建四部曲之三:正式创建窗口
58
59 HWND hWnd = CreateWindow(L"ForTheDreamOfGameDevelop",WINDOW_TITLE,
60 WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,
61 WINDOW_HEIGHT, NULL, NULL, hInstance, NULL
62 );
63
64 //【4】窗口创建四部曲之四:窗口的移动、显示与更新
65
66 MoveWindow(hWnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true); //调整窗口显示时的位置,使窗口左上角位于(250, 80)处
67
68 ShowWindow(hWnd, nShowCmd); //调用此函数显示窗口
69
70 UpdateWindow(hWnd); //对窗口进行更新,就像我们买了新房装修
71
72 //【5】消息循环过程
73
74 MSG msg = {0}; //定义并初始化msg
75 while (msg.message != WM_QUIT) //使用while循环,如果雄安喜不是WM_QUIT消息,就继续循环
76 {
77 if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) //查看应用程序消息队列,有消息时从队列中的消息派发出去
78 {
79 TranslateMessage(&msg); //将虚拟键消息转换为字符消息
80 DispatchMessage(&msg); //分发一个雄安喜给窗口程序
81 }
82 }
83
84 //【6】窗口类的注销
85
86 UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance); //程序转杯结束,注销窗口类
87
88 return 0;
89 }
90
91 //============================【WndProc()函数】======================
92 // 描述:窗口过程函数wndproc对敞口消息进行处理
93 //=============================================================================
94
95 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
96 {
97 switch(message) //seitch语句开始
98 {
99 case WM_PAINT: // 若是客户区重绘消息
100 ValidateRect(hWnd, NULL); // 更新客户区的显示
101 break;
102
103 case WM_KEYDOWN: // 若是键盘按下消息
104 if(wParam == VK_ESCAPE) // 如果被按下的键是ESC
105 {
106 DestroyWindow(hWnd); // 销毁窗口, 并发送一条WM_DESTROY消息
107
108 }
109 break;
110
111 case WM_DESTROY: //若是窗口销毁消息
112 PostQuitMessage(0); //向系统表明有个线程有终止请求。用来响应WM_DESTROY消息
113 break;
114
115 default: //若上述case条件都不符合,则执行该default语句
116 return DefWindowProc(hWnd, message, wParam, lParam); //调用缺省的窗口过程
117 }
118
119 return 0; //正常退出
120 }
第42行(HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); //本地加载自定义ico图标
需向工程文件中添加ico图片