DirectX学习笔记(⼀)⼀.前⾔学习DirectX的初衷是为了做游戏,为了开发游戏引擎。
我在之前其实学习过⼀段时间的DirectX,但是由于后来⼀些其他原因将DirectX的学习搁置到了⼀边。
现在有了⽐较充裕的时间,想把DirectX的相关知识捡起来,复习以前学习过的知识,顺带学习新的知识。
⼆.windows相关⾸先,其实我对windows编程了解也不是很多。
⼤⼀的时候看过⼀段时间的windows程序设计这本书,但是好像看天书⼀样,学了没有多久就转去学Qt去了。
后来回来学习DirectX的时候,发现需要windows编程的基础,当时还⽐较后悔没有好好看windows程序设计这本书。
还在学习DirectX对windows编程能⼒的要求不是很⾼,当然你对windows编程越了解越好啦。
不了解windows编程也没有关系,花⼀点点时间去了解⼀下windows窗⼝的建⽴和消息循环相关的知识就可以开始DirectX的学习了。
当然以后要是有时间还是多学习下windows编程相关知识⽐较好。
因为我不想花费太多的时间在windows编程上⾯,所以说在这个地⽅我也不会做太多的介绍。
⽽且为了不每次在写⼀个⼜⼀个的demo的时候,都要重复创建⼀个windows窗⼝的过程,所以我在这⾥做了⼀个⼩⼩的封装。
我将这个封装后的类称为Engine_Application,它具体的定义如下:1/*========================================================2 * 应⽤程序类,⽤于创建窗⼝3 *=======================================================*/456 #ifndef _APPLICATION_H_7#define _APPLICATION_H_89 #include <windows.h>10 #include <functional>11 #include <fstream>1213#pragma comment(lib, "winmm.lib")1415 typedef LRESULT (CALLBACK* MsgProc)(HWND, UINT msg, WPARAM, LPARAM);1617class Engine_Application18 {1920public:2122 Engine_Application(MsgProc msg);2324virtual ~Engine_Application();2526public:2728bool InitWindow(HINSTANCE hInstance, wchar_t *className, wchar_t *winName, DWORD style, int x = 0,29int y = 0, int width = 800, int height = 600);3031void Show(int nCmdShow);3233int Run();3435void SetRenderFunc(std::function<void (float dt)> pFunc);3637public:3839int GetWinWidth()const;4041int GetWinHeight()const;4243 HWND GetWinHwnd()const;4445protected:4647 HWND m_hWnd;48 HINSTANCE m_hInstance;4950 MsgProc m_pMsg;5152 wchar_t *m_pClassName;5354int m_nWidth;55int m_nHeight;5657 std::function<void (float dt)> m_pRenderFunc;58 };59606162#endif现在让我们来具体看⼀下这个类⾥⾯的内容:a.消息处理函数1 typedef LRESULT (CALLBACK* MsgProc)(HWND, UINT msg, WPARAM, LPARAM);⾸先我定义了⼀个函数指针,注意看⼀下就会发现这个函数指针的原型和⼀个窗⼝的消息函数是⼀模样的。