当前位置:首页 > Windows程序 > 正文

《逐梦旅程 WINDOWS游戏编程之从零开始》读书笔记1

2024-03-31 Windows程序

窗口的正式创建

窗口的显示与更新

1. 设计:使用WNDCLASSEX结构体,这里注意的是C++中的结构体中的成员默认是共有的,所以可以直接通过 . 来调用。

typedef struct tagWNDCLASSEX { UINT cbSize; //UINT类型的cbSize,表示该结构体的字节数大小 UINT style; //指定窗口的风格样式 WNDPROC lpfnWndProc; //指向窗口过程函数的函数指针 int cbClsExtra; //窗口类附加内存 int cbWndExtra; //窗口的附加内存 HINSTANCE hInstance; //包含窗口过程的实例句柄 HICON hIcon; //指定图标句柄 HCURSOR hCursor; //窗口的光标句柄 HBRUSH hbrBackground; //背景画刷句柄 LPCTSTR lpszMenuName; //指定菜单资源的名字 LPCTSTR lpszClassName; //指定窗口类的名字 HICON hIconSm; //指定窗口类的小图标句柄,一般不用 } WNDCLASSEX, *PWNDCLASSEX;

关于这个结构体的具体说明见msdn文档:https://msdn.microsoft.com/zh-CN/library/windows/desktop/ms633577(v=vs.85).aspx

关于windows中的基本数据类型的说明见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx和Windows编程 Win32API中常见的数据类型

来个例子:

1 //【1】窗口创建四步曲之一:开始设计一个完整的窗口类 2 WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX定义了一个窗口类,{0}用来初始化结构体 3 wndClass.cbSize = sizeof( WNDCLASSEX ) ; //设置结构体的字节数大小,一般取sizeof(WNDCLASSEX)就好 4 wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口的样式,常用的取值及其意义可参考msdn文档 5 wndClass.lpfnWndProc = WndProc; //设置指向窗口过程函数的指针 6 wndClass.cbClsExtra = 0; //窗口类的附加内存,取0就可以了 7 wndClass.cbWndExtra = 0; //窗口的附加内存,依然取0就行了 8 wndClass.hInstance = hInstance; //指定包含窗口过程的程序的实例句柄。 9 wndClass.hIcon=(HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //本地加载自定义ico图标 10 wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); //指定窗口类的光标句柄。 11 wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个灰色画刷句柄 12 wndClass.lpszMenuName = NULL; //用一个以空终止的字符串,指定菜单资源的名字。 13 wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一个以空终止的字符串,指定窗口类的名字。

关于窗口的过程函数:

首先要明白的是lpfnWndProc是 WNDPROC类型的,一个函数指针(msdn中的说明),指向窗口过程函数。窗口过程函数是一个回调函数。针对windows的消息处理机制,窗口过程函数被调用过程是这样的:

技术分享

2. 注册

调用RegisterClassEx函数对其进行注册,注册成功后才可以创建该类型的窗口。RegisterClassEx(&wndClass)

3. 窗口的正式创建

首先可以调用AdjustWindowRect()函数来根据我们设定的尺寸和风格来计算窗口的尺寸。设计好窗口类并将其注册成功后,就可以用CreateWindow函数来创建设计好的这种类型的窗口了。

//【3】窗口创建四步曲之三:正式创建窗口 HWND hwnd = CreateWindow( L"ForTheDreamOfGameDevelop",WINDOW_TITLE, //喜闻乐见的创建窗口函数CreateWindow WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL );

4. 窗口的显示和更新

主要是用到三个函数:用于设定窗口和显示位置的MoveWindow函数,用于显示窗口的ShowWindow函数,用于更新窗口的UpdateWindow函数

技术分享

5. 消息循环体系

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/39096.html

Jm-杰米博客Jamie
草根站长的技术交流乐园!IT不会不要紧快来好好学习吧!
  • 20786文章总数
  • 7494595访问次数
  • 建站天数
  • 友情链接