1.文件类型:

ipch文件夹和.sdf文件:这两个文件都是Visual Studio用来保存预编译的头文件和Intellisense用的。(可删除,对于工程开发没有影响)

Debug文件夹:存放着编译过程中的中间文件,以及最后的目标文件,.exe执行文件(如果是Release型,则不出现Debug文件夹而是Release文件夹)

.vcxproj:项目文件

.sln:记录着关于解决方案中的信息

.suo:记录着应用于该解决方案的用户选项

.opensdf:记录着关于项目的状态信息(只在项目处于打开状态时才有)

2. Windows平台游戏铁三角:C++, Windows API, 图形库(DirectX或OpenGL)

3. 3中基本的创建交互式Windows应用程序的方式:

a. 使用Windows API进行开发:

b. 使用MFC来进行开发:

比Windows API更高层,因此效率必然不如Windows API。但有底层代码隐蔽性的特点且封装了很多实际上没有、用到的东西,不利于游戏开发的效率和游戏的运行速度,不适合游戏开发。MFC做游戏地图编辑器之类的工具软件倒是比较合适。

c. 使用Windows Forms:基于窗口的新的开发机制,是微软.NET开发框架的图形用户界面部分,该组件通过将现有的Windows API封装为托管代码提供了对Windows本地(native)组件的访问方式。(我们通常可以把这套组件看做事MFC的替代品)

4. API:应用程序编程接口(Application Programming Interface)

SDK:软件开发包(Software Development Kit)常用DirectX SDK

5. MSDN:Microsoft Developer Network Library

微软开发者网络帮助库

6. int WINAPI WinMain()

头文件WinDef.h中:#define WINAPI __stdcall

__stdcall表示一种调试约定

参数:

第一个(HINSTANCE类型 hInstance),当前运行的实例句柄。h表示handle,就是句柄。

第二个(HINSTANCE类型 hPrevInstance),当前实例的前一个实例句柄

第三个(LPSTR类型 lpCmdLine),一个以空终止的字符串,指定传递给运用程序的命令行参数。lp表示参数是一个指针。

第四个(int类型 nCmdShow),指定程序窗口应该如何显示(最大化、最小化、隐藏等)

7. MessageBox函数

参数:

第一个(HWND类型 hWnd),表示我们显示的消息框所属的窗口的句柄

第二个(LPCTSTR类型 lpText),一个以NULL结尾的字符串,表示所要显示的消息框的内容

第三个(LPCTSTR类型 lpCaption),一个以NULL结尾的字符串,消息框的标题内容

第四个(UINT类型 uType),表示消息框窗口的样式

使用多个标识符,用逻辑或连接

常用于小时错误消息(提示缺失.dll什么的)

8. PlaySound函数(编译前连接winmm.lib库文件)

参数:

第一个(LPCTSTR类型 pszSound),字符串,指定要播放的声音文件,设为NULL时停掉所有当前播放的声音

第二个(HMODULE类型 hmod),包含了第一个参数中指定的声音文件作为资源的可执行文件句柄

第三个(DWORD类型 fdwSound),用来控制声音播放的标志

9. 句柄——每个Windows资源都有且都独特的“身份证”

10. MSG结构体(消息的表示形式)

参数:

第一个(HWND类型 hwnd),指定了消息所属的窗口

第二个(UINT类型 message),指定了消息的标识符

第三、四个(WPARAM类型 wParam 和 LPARAM类型 lParam),都用于指定消息的附加信息

第五个(DWORD类型 time),表示投递到消息队列中的时间

四六个(POINT类型 pt),表示投递到消息队列是鼠标的当前位置

消息队列:用于存放改程序创建窗口的消息

Windows将产生的消息依次放到消息队列中,而应用程序则通过一个消息循环不断地从消息队列中取出消息并进行响应。

11. 窗口类的设计:

WNDCLASSEX结构体

WNDCLASSEX wndClass = { 0 };

// 用WNDCLASSEX定义了一个窗口类,即用wndClass实例化了WINCLASSEX,用于之后窗口的各项初始化。

参数:

第一个(UINT类型 cbSize)表示该结构体的字节数大小,一般取sizeof(WNDCLASSEX)

第二个(UINT类型 style)指定这一类型窗口的风格样式,多个用逻辑与连接

第三个(WNDPROC类型 lpfnWndProc)一个函数指针,指向窗口过程函数(是一个回调函数)

第四个(int类型 cbClsExtra)表示窗口类的附加内存。一般设置为0

第五个(int类型 cbWndExtra)表示窗口的附加内存。一般设置为0

第六个(HINSTANCE类型 hInstance)指定包含窗口过程的程序的实例句柄。(把WinMain函数的第一个参数,即改程序当前运行的实例句柄传给它)可

第七个(HICON类型 hIcon)指定窗口类的图标句柄。用LoadIcon函数加载将返回值赋给hIcon;通常用LoadImage函数从文件直接加载。

第八个(HCURSOR类型 hCursor)表示窗口类的光标句柄。可用LoadCursor加载一个光标

第九个(HBRUSH类型 hbrBackground)指定窗口类的背景画刷句柄

第十个(LPCTSTR类型 lpszMenuName)指定菜单资源的名字

第十一个(LPCTSTR类型 lpszClassName)指定窗口类的名字

第十二个(HICON类型 hIconSm)指定窗口类的小图标句柄(任务栏右下角托盘显示的小图标)

12. 窗口类注册函数:RegisterClassEx

只有一个参数,即上一步中所设计的窗口类对象的指针

例如:

WNDCLASSEX wndClass = { 0 };

RegistrClassEx( &wndClass );

13. 窗口正式创建:CreateWindow函数

(可以调用AdjusWindowRect()函数计算窗口的尺寸)

参数:

第一个(LPCTSTR类型 lpClassName)指定对应窗口类的名称

第二个(LPCTSTR类型 lpWindowName)指定创建窗口的名字

第三个(DWORD类型 dwStyle)指定创建窗口的样式,比如预设好的WS_OVERLAPPEDWINDOW类型

第四个(int类型 x)指定窗口的水平位置,CW_USEDEFAULT默认位置

第五个(int类型 y)指定窗口的竖直位置,CW_USEDEFAULT默认位置

第六个(int类型 hWidth)指定窗口的宽度

第七个(int类型 hHeight)指定窗口的高度

第八个(HWND类型 hWndParent)指定被创建窗口的父窗口句柄,可选,通常设为NULL

第九个(HMENU类型 hMenu)指定窗口菜单的资源句柄,可选,通常设为NULL

第十个(HINSTANCE类型 hInstance)指定窗口所属的应用程序实例的句柄,即应用程序的实例ID(WinMain的第一个参数)

第十一个,lpParam作为WM_CREATE消息的附加参数lParam传入的数据指针,可选,通常为NULL

14. 窗口的显示和更新

改变窗口位置和大小:MoveWindow函数(左上角为原点(0,0))

参数:

第一个(HWND类型 hWnd)之前创建窗口的句柄

第二个(int类型 X)相对左上角的新位置

第三个(int类型 Y)相对左上角的新位置

第四个(int类型 nWidth)指定窗口的新宽度

第五个(int类型 nHeight)指定窗口的新高度

第六个(BOOL类型 bRepaint)指定是否要重画窗口

显示窗口:ShowWindow函数

参数:

第一个(HWND类型 hWnd)窗口句柄

第二个(int类型 nCmdShow)指定窗口的显示状态,可直接填nCmdShow

更新窗口:UpdateWindow函数

参数:

hWnd 指创建成功后的窗口句柄

15. 两套消息循环体系:

GetMessage为核心:

参数:

第一个(LPMSG类型 lpMsg)指向一个消息(MSG)结构体,GetMessage从线程的消息队列中取出的消息信息将保存在该结构体中

第二个(HWND类型 hWnd)指定接受属于哪一个窗口的消息,一般设为NULL

第三个(UINT类型 wMsgFilterMin)指定要获取消息的最小值,通常为0

第四个(UINT类型 wMsgFilterMax)指定要获取消息的最大值,若与最小值同时为0则表示接受所有消息

收到WM_QUIT消息,返回值为0

否则,返回值为非0值

出错,返回-1

PeekMessage为核心:(更常用)

参数:

前四个与GetMessage一样

第五个(UINT类型 wRemoveMsg)用于指定消息的获取方式。取PM_NOREMOVE,则取出消息后,消息将不会从消息队列中移除;取PM_REMOVE,则移除

能在消息队列中取到消息,返回值为非0;否则为0

区别:

无论应用程序消息队列是否有消息,PeekMessage函数都立即返回

而GetMessage函数只有在消息队列中有消息时才返回,队列中无消息则会一直等,在等的时间里,应用程序不能执行任何指令

P.S. GetMessage和PeekMessage函数的第二个参数通常不要填窗口句柄,最好填0(有可能某一时间这个窗口句柄失效了,而消息循环仍然在运行,会导致错误)

16. 窗口过程函数:

主要用于处理发送给窗口的消息,Windows应用程序的主要代码部分

窗口过程函数的名字可以自定义,不必用WindowsProc

但函数定义形式必须和声明格式一样

系统通过窗口过程函数的地址(指针)调用窗口过程函数,而不是函数名

参数:

第一个(HWND类型的hwnd)

第二个(UINT类型的uMsg)表示待处理消息的ID,即消息类型

第三、四个(WPARAM类型的wParam,LPARAM类型的lParam)用于标识消息的附加信息

17. 窗口类的注销:UnregisterClass函数

18. 当我们的程序需要GDI来绘图时,必须先去的设备环境的句柄

19. 获取设备环境句柄(HDC)的两种方法

BeginPaint函数、EndPaint函数

参数:(两个函数一样)

第一个(HWND类型 hWnd)

第二个(const PAINTSTRUCT类型的*lpPaint)将欧体包含了应用程序用来绘制它所拥有的窗口客户区所需要的信息

(P.S. ValidateRect函数,用于更新指定窗口的无效矩形区域,使之有效:参数1 HWND类型hWnd,参数2 const RECT类型*lpRect为NULL时客户区将会生效)

GetDC函数、ReleaseDC函数

参数:

第一个(HWND类型hWnd),均有

第二个(HDC类型hDC)指向要释放的设备上下文环境的句柄,releaseDC独有

20. 坐标转换:

客户区 -> 屏幕区:ClientToScreen()

屏幕区 -> 客户区:ScreenToClient()

21. 一个设备环境中同一时刻只能有一个画笔对象,也只能有一个画刷对象

P.S. GDI对象已经创建变回占用部分内存,一旦用不到它了,无必要将他们删除

Windows游戏编程学习笔记相关推荐

  1. 【逐梦旅程Windows游戏编程学习笔记 ①】基本GDI绘图

    近半年各种忙碌,一直没写博客,现在得空学习记录一下,原书为<逐梦旅程 Windows游戏编程之从零开始>毛星云编著 实现样式与功能: 实现功能: 1,显示title:"致我们.. ...

  2. Windows高级编程学习笔记(一)

    写在前面的话 之前学的Windows编程都是界面啊.网络编程啊之类的纯应用层面的东西,总是感觉而自己没有达到自己期望中的水平.什么水平呢?如果让你编写监控系统资源的工具,或者DLL注入相关软件,或者底 ...

  3. DirectX 11游戏编程学习笔记之1: 开场白

    本文由哈利_蜘蛛侠原创,转载请注明出处!有问题欢迎联系2024958085@qq.com 这是我之前的博客系列"DirectX9.0c游戏开发手记之'龙书'第二版学习笔记"的平行版 ...

  4. java2d游戏代码_JAVA游戏编程学习笔记(三)Java 2D游戏底层绘图框架

    前二篇记录了java如何绘制图形与动画,今天打算总结复习一下,把这些知识点集合起来,制作一个Java2D小游戏框架(暂且这么叫,好像挺牛逼似的!). Java AWT 下边提供一个 class Can ...

  5. 转 windows核心编程 学习笔记 目录

    windows核心编程--SEH(结构异常处理) SEH 的工作原理.         Windows 程序设计中最重要的理念就是消息传递,事件驱动.当GUI应用程序触发一个消息时,系统将把该消息放入 ...

  6. 3D游戏编程学习笔记(七):模型与动画

    一.前言 本次3D游戏编程我们将设计一个智能巡逻兵游戏. 二.游戏基本内容及规定 游戏内容部分 创建一个地图和若干巡逻兵(使用动画): 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址.即每次 ...

  7. 3D游戏编程学习笔记(五):与游戏世界交互

    一.前言 本次3D游戏编程我们将设计一个简单打飞碟(Hit UFO)有游戏. 二.游戏基本内容及规定 游戏基本内容 游戏有 n 个 round,每个 round 都包括10 次 trial: 每个 t ...

  8. Windows高级编程学习笔记(二)

    第三章 进程 发现这本书的文字很简练,知识点突出,而且翻译的基本没有拗口的地方,是本好书,(^o^)/~ 下面进入正题. 关于内存映射 Windows内存管理的分页机制在微机原理课程中有提到,后面的章 ...

  9. Python微信打飞机游戏编程学习笔记01

    刚学习Python,看别人写的小游戏,照搬照学照写,纯手工手打,一步步,加深印象,加深学习 运行环境是: Python 3.7.1   pygame 1.9.4 微信很火的打飞机游戏拿了学习下 第一步 ...

最新文章

  1. 一套代码小程序WebNative运行的探索01
  2. AgileEAS.NET平台开发指南-实现插件
  3. 只有mdf文件的恢复技术
  4. mysql合并表快速去重_MySQL数据表合并去重的简单实现方法
  5. Vue指令篇_v-model_数据双向绑定
  6. 如何deactivate Material delta download
  7. 世上描述宇宙最精确的科学理论
  8. web 折线图大数据量拉取展示方案_分布式、服务化的企业级 ERP 系统架构设计方案...
  9. java jslider 自定义_Java自定义JSlider UI
  10. UVA10934 Dropping water balloons【DP】
  11. 【数学建模】排队论模型及MATLAB实现含GUI界面
  12. 惠普服务器显示器接口类型,介绍:目前显示器主要接口
  13. 人脸识别活体检测技术探讨:多物理特征融合加分类器的算法技术
  14. 数据库恢复时出现诸如“设备激活错误
  15. Linux debian安装DBeaver连接MySQL8、导入和导出数据库详细教程
  16. 持续爆点:一对一直播和短视频
  17. 今年建筑工程设计乙级资质办理申报流程
  18. 很全的饮食英语词汇表
  19. CAD软件中如何设置符号库?
  20. 接口测试平台-106: 番外-正交工具 excel导出

热门文章

  1. 从芯片小厂成为显卡巨头,23年里,N厂经历了什么?
  2. 自定义百度地图InfoWindow样式
  3. php fav ico_前5名:失败原因,Fav桌面环境,代码游戏玩家评论等
  4. 2021了还有必要发外链吗-带你深度解析外链对SEO的帮助
  5. 斐波那契数列(前30)Python
  6. FLUENT两相流如何选择模型
  7. #5月23日湖北省赛总结 + 个人计划变更
  8. [原创]浅谈我们应招聘应届毕业生做测试吗?
  9. python oledb dbf_在Python中打开和搜索dBase III(DBF)数据库
  10. AES标准及Rijndael算法解析