DirectX学习之第一个可运行的工程
学习一门开发语言的第一件事情当然是搭建一个可运行的环境,然后运行一个可成功执行的案例。
本人在学习DirectX的第一个工程的时候,参考了雨凇MoMo的一篇文章(https://www.xuanyusong.com/archives/802),但是看了之后,还是不知道如何才能运行起来。
然后,又参考了一篇文章(https://blog.csdn.net/chenwu_843402773/article/details/8077935)。
通过参考第二篇文章中的一些内容,最终把第一篇文章中的案例运行了起来,在此做一下记录,具体原理,相信随着学习 Direct 的逐渐升入,会理解的,现在不做过多说明,哈哈哈哈哈哈。。。
#include<d3d9.h> #define WINDOW_CLASS "UGPDX" //宏定义窗口类名称
#define WINDOW_NAME "MyFirstDirectProject" //宏定义窗口名称 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pDevice = NULL;
HRESULT InitD3D(HWND hwnd);
void Cleanup();
void Render(); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
WINDOW_CLASS, NULL };
RegisterClassEx(&wc); HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME, WS_OVERLAPPEDWINDOW,
, , , , GetDesktopWindow(), NULL,
wc.hInstance, NULL); if (InitD3D(hWnd) == S_OK)
{
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd); MSG msg;
ZeroMemory(&msg, sizeof(msg)); while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, , , PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
} UnregisterClass(WINDOW_CLASS, wc.hInstance); return ;
}
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY:
PostQuitMessage();
return ;
break; case WM_KEYUP:
if (wParam == VK_ESCAPE) PostQuitMessage();
break;
} return DefWindowProc(hWnd, msg, wParam, lParam);
} HRESULT InitD3D(HWND hwnd)
{
if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
{
return E_FAIL;
} D3DPRESENT_PARAMETERS d3dpparams;
ZeroMemory(&d3dpparams, sizeof(d3dpparams));
d3dpparams.Windowed = true;
d3dpparams.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpparams.BackBufferFormat = D3DFMT_UNKNOWN; if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpparams,
&g_pDevice)))
{
return E_FAIL;
} return S_OK;
} void Cleanup()
{
if (NULL != g_pDevice)
{
g_pDevice->Release();
}
if (NULL != g_pD3D)
{
g_pD3D->Release();
}
} void Render()
{
if (NULL == g_pDevice)
{
return;
} g_pDevice->Clear(, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(, , ), 1.0f, ); if (SUCCEEDED(g_pDevice->BeginScene()))
{
g_pDevice->EndScene();
} g_pDevice->Present(NULL, NULL, NULL, NULL);
}
运行结果:

DirectX学习之第一个可运行的工程的更多相关文章
- Spark菜鸟学习营Day6 分布式代码运行调试
Spark菜鸟学习营Day6 分布式代码运行调试 作为代码调试,一般会分成两个部分 语法调试,也就是确定能够运行 结果调试,也就是确定程序逻辑的正确 其实这个都离不开运行,所以我们说一下如何让开发的S ...
- 学习KnockOut第一篇之Hello World
学习KnockOut第一篇之Hello World 笔者刚开始学习KnockOut.写的内容就相当于一个学习笔记.且在此处向官网致敬,比较喜欢他们家的Live Example版块,里面有jsFiddl ...
- Java学习记录第一章
学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...
- javascript的ES6学习总结(第一部分)
ES6(ESNext学习总结——第一部分) ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版. ECMA每年6月份,发布一个版本 201 ...
- PHP语言学习之php-fpm 三种运行模式
本文主要向大家介绍了PHP语言学习之php-fpm 三种运行模式,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. php-fpm配置 配置文件:php-fpm.conf 开启慢日志功能的 ...
- QT学习之第一个程序
QT学习之第一个程序 目录 手动创建主窗口 居中显示 添加窗口图标 显示提示文本 Message Box的应用 手动连接信号与槽 手动创建主窗口 窗口类型 QMainWindow: 可以包含菜单栏.工 ...
- 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:
小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...
- JVM学习篇-第一篇
JVM学习篇-第一篇 JDK( Java Development Kit): Java程序设计语言.Java虚拟机.Java类库三部分统称为JDK,JDK是用于支持Java程序开发的最小环境** ...
- 学习C#第一天
学习C#第一天 先是了解了VS 2019编辑器的基本使用 安装Visual Studio https://mp.weixin.qq.com/s?__biz=MzU0MTg5NDkzNA==&m ...
随机推荐
- Python学习基础(三)——装饰器,列表生成器,斐波那契数列
装饰器——闭包 # 装饰器 闭包 ''' 如果一个内部函数对外部(非全局)的变量进行了引用,那么内部函数被认为是闭包 闭包 = 函数块 + 定义时的函数环境 ''' def f(): x = 100 ...
- 20165310 《Java程序设计》课程总结
20165310 <Java程序设计>课程总结 一.每周作业及实验报告博客链接汇总 预备作业一:我期望的师生关系 20165310 我期望的师生关系 预备作业二:学习基础和C语言基础调查 ...
- Codeforces Round #439 (Div. 2) Problem A (Codeforces 869A) - 暴力
Rock... Paper! After Karen have found the deterministic winning (losing?) strategy for rock-paper-sc ...
- darknet中的若干问题
2018-04-20: https://github.com/pjreddie/darknet/issues/717 改了一下午,然后/usr/include/c++/4.8/bits/stl_rel ...
- topcoder srm 390 div1
problem1 link 记录一个模$k$之后的值是否出现过,出现过则出现循环,无解:否则最多$k$ 次一定能出现0. import java.util.*; import java.math.*; ...
- HDU - 1875 畅通工程再续【最小生成树】
Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖 ...
- Java内存模型原理总结(转自51CTO)
转载地址:http://developer.51cto.com/art/201811/587220.htm [51CTO.com原创稿件]这篇文章主要介绍模型产生的问题背景,解决的问题,处理思路,相关 ...
- CodeTyphon跨平台交叉编译的配置
CodeTyphon和Lazarus的关系相当于就是ubuntu和linux的关系 不过CodeTyphon提供了很多一键配置即可使用的交叉编译配置,而Lazarus就比较麻烦了,我也没用Lazaru ...
- C语言变量的作用域和存储类型
1.动态局部变量:也称局部变量.自动变量,是指在函数内部定义的自动变量,不带static修饰,作用域是定义该变量的子程序.在退出函数后,变量自带内存会自动释放. 2.静态局部变量:是指在函数内部定义的 ...
- GDOI2018D2T1 谈笑风生
T1 谈笑风生 [题目描述] [输入] [输出] 一行两个数,所需能量P与在能量最小的前提下最短的到达时间t. [样例输入] 5 7 66 4 3 2 1 5 1 2 1 5 2 3 2 4 2 5 ...