Windows游戏开发之自定义窗口

  • A+

 

创建空白的Win32应用程序,添加一个cpp文件

在开头引入windows库文件 #include "windows.h"

然后就是Windows的入口函数WinMain了,它是整个应用程序的入口点

定义如上,VAssisX可以快速提示写出来,不需要死记硬背

下面就开始自定义窗口了

首先,1.设置窗口

WNDCLASSEX是一个结构体,定义窗口的相关属性

图片上的只是结构体的部分属性,基本上不需要怎么变

需要自定义相关属性时,可以查看相关的文档,vs按F1

其中lpszClassName是类的名字,用于识别这个结构体

lpfnWndProc是消息循环函数

如图所示,这个函数是固定的

在Windows中每个应用程序都有着这么一个消息函数

用于接收用户的相关的交互事件,例如:鼠标点击事件,键盘按下事件等

其中default是让操作系统处理DefWindowProc(hwnd, message, wParam, lParam)


2.注册窗口
if (RegisterClassEx(&wndclass) == 0) {
return -1;
}

如果注册不成功就返回-1,表示不正常退出

wndclass就是第一布定义的结构体

3.创建窗口
HWND hwnd = CreateWindow(L"myclass", L"吃丨菜", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
800, 600, NULL, NULL, hInstance, NULL);

第一个参数就是第一步定义的结构体类名

第二个参数是窗口的标题

800,600分别是窗口的宽和高

其他的属性是一些Windows事先定义好的宏和NULL空

相关的参数功能看文档吧!

4.显示窗口
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);

这两句就不说了,一看就知道是什么意思了

5.处理消息
MSG msg = { 0 };//消息结构体,自动保存相关消息的信息
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, 0, NULL, NULL, PM_REMOVE)) {
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//让消息函数处理
}
}

PeekMessage(&msg, 0, NULL, NULL, PM_REMOVE)

从队列中取出一条消息,并从消息队列中移除PM_REMOVE

结束的时候需要注销定义的窗口结构体释放资源

UnregisterClass(L"myclass", hInstance);

这样,一个基本自定义的窗口就做好了!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: