从 0 开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
37243 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
从 0 开始学游戏开发
15
15
1.0x
00:00/00:00
登录|注册

第7讲 | 如何建立一个Windows窗体?

Tinker库
MoveWindow函数
WindowProcedure函数
CreateWindowEx函数
WinMain函数
WNDCLASSEX结构
窗体缩放按钮
滚动条
状态栏
工作区域
工具栏
菜单栏
标题栏
全屏窗体的实现
程序运行的大循环
窗体的结构
使用Python编写Windows窗体
使用C/C++编写Windows窗体
Windows窗体由哪些部分构成?
小结
如何建立一个Windows窗体?

该思维导图由 AI 生成,仅供参考

今天,我要跟你分享开发 Windows 游戏的第一步,建立窗体。
上一节,我讲解 Python 和 C++ 的编译器,以及它们各自对应的 IDE 该如何选择,并且测试了 C/C++ 的运行,编译了一个 Lua 静态库。准备工作基本上算是完成了。
如果你有一些编程功底,应该知道建立 Windows 的窗体所需的一些基础知识。如果你经验稍丰富一些,还应该知道 Delphi、C++Builder、C# 等等。这些工具都可以帮助你非常方便地做出一个空白窗体,但是这些窗体并没有游戏的绘图系统,所以它们只是“建立了一个标准窗体”而已。因此,虽然建立窗体是我们这一节的内容,但我们要探讨的是,在窗体背后,Windows 系统做了什么。

Windows 窗体由哪些部分构成?

我们常规意义上的 Windows 窗体,由下列几个部分组成。
标题栏:窗口上方的鼠标拖动条区域。标题栏的左边有控制菜单的图标,中间显示的是程序的标题。
菜单栏:位于标题栏的下面,包含很多菜单,涉及的程序所负责的功能不一样,菜单的内容也不一样。比如有些有文件菜单,有些就没有,有一些窗体甚至根本就没有菜单栏。
工具栏:位于菜单栏的下方,工具栏会以图形按钮的形式给出用户最常使用的一些命令。比如,新建、复制、粘贴、另存为等。
工作区域:窗体的中间区域。一般窗体的输入输出都在这里面进行,如果你接触过 Windows 窗体编程,就知道在这个工作区域能做很多的事情,比如子窗体显示、层叠,在工作区域的子窗体内进行文字编辑等等。你可以理解成,游戏的图形图像就在此处显示。
状态栏:位于窗体的底部,显示运行程序的当前状态。通过它,用户可以了解到程序运行的情况。比如的,如果我们开发出的窗体程序是个编辑器的话,我按了一下 Insert 键,那么状态栏就会显示 Ins 缩写;或者点击到哪个编辑区域,会在状态栏出现第几行第几列这样的标注。
滚动条:如果窗体中显示的内容过多,不管横向还是纵向,当前可见的部分不够显示时,窗体就会出现滚动条,分为水平滚动条与垂直滚动条两种。
窗体缩放按钮:窗体的缩放按钮在右上角,在窗体编程中属于 System 类目。这些缩放按钮依次为最小化、最大化和关闭按钮。
我们来看一张标准的 Windows 窗体截图,这个软件名是 Notepad++。
这是 MSDN 上对于窗体结构的说明:
typedef struct tagWNDCLASSEX {
UINT cbSize; //结构体大小,等于 sizeof(WNDCLASSEX)
UINT style; //窗体的风格
WNDPROC lpfnWndProc; //窗体函数指针
int cbClsExtra; //附加在窗体类后的字节数,初始化是零
int cbWndExtra; //附加在窗体实例化的附加字节数。系统初始化是零,如果一个应用程序使用WNDCLASSEX注册一个通过在资源中使用CLASS指令建立的对话框时,必须把这个成员设成DLGWINDOWEXTRA。
HINSTANCE hInstance; //该对象的实例句柄
HICON hIcon; //该对象的图标句柄
HCURSOR hCursor; //该对象的光标句柄
HBRUSH hbrBackground; //该对象的背景刷子
LPCTSTR lpszMenuName; //菜单指针
LPCTSTR lpszClassName; //类名指针
HICON hIconSm; //与窗体关联的小图标,如果这个值为NULL,那么就把hIcon转换为大小比较合适的小图标
} WNDCLASSEX, *PWNDCLASSEX;

使用 C/C++ 编写 Windows 窗体

接下来,我将使用 C/C++IDE 来编写代码,完成一个默认窗体的开发,并让它运行起来。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了使用C/C++和Python编写Windows窗体的基本流程。首先详细解释了Windows窗体的构成,包括各个部分的功能和代码示例。针对C/C++编写,文章给出了注册窗口类、创建窗体、消息处理以及窗体移动等操作的代码示例,让读者了解如何使用C/C++编写并显示一个标准的Windows窗体。对于Python编写,介绍了使用Tinker库建立一个窗体的示例代码,并指出了窗体编程的细节。此外,还提到了使用OpenGL接口编写游戏时,窗体可以成为游戏屏幕窗体的方法。总的来说,本文为读者提供了基于C/C++和Python的Windows窗体开发方法,适合对Windows窗体编程感兴趣的读者阅读学习。文章内容涵盖了窗体结构、消息循环、脚本语言编写窗体等方面,为读者提供了全面的技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • 壬大师
    老师,python能开发手机游戏吗,游戏引擎用的是pygame吗?

    作者回复: 目前没有成熟的python游戏引擎支持手机游戏开发。

    2018-06-11
    1
  • @浩
    用QT写窗口如何,MFC有点晦涩难懂。

    作者回复: 我写的不是MFC

    2018-06-09
    1
  • 立春
    C++用的是MFC了……

    作者回复: mfc 全称 microsoft foundation classes,微软基础库,建立窗体可以使用 mfc,也可以使用ATL等等,但基础代码还是windows api

    2018-06-09
    1
  • 宋桓公
    最大化,加无边框等于全屏

    作者回复: 这是一种方式,没错的

    2018-06-27
  • 壬大师
    老师,那手游的开发目前也都是C++咯?像简单游戏比如手机棋牌类游戏一般用什么语言?

    作者回复: 不都是。原生开发,苹果会用obj c, 安卓java,或者也有封装后生成的,比如cocos系列的语言

    2018-06-13
  • 呵呵
    用c++建立窗体,默认用的什么图形库?

    作者回复: windows api

    2018-06-09
  • Geek_King@技术爱好者
    c++窗口那段程序,编译时需加上-mwindows或者-lgdi32,又或者在建工程的时候选择建立gui程序🙄🙄🙄
    2018-06-15
    10
  • GS
    python3 要用小写的tkinter
    2018-07-28
    4
  • 呵呵
    要是能提供远嘛就好了,跟着后面敲太麻烦
    2018-06-09
    4
  • 清新灬小柠檬
    直接将显示器的大小当作参数传到绘制窗体的函数中?
    2019-06-24
    1
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部