解析最简单的DirectX程序“Blank Window”(二)

本文深入探讨了在Win32环境下使用Direct3D创建窗口的过程。通过具体代码实例介绍了如何初始化Direct3D设备,包括获取显示器模式、设置呈现参数等关键步骤。同时对比了WndProc()与MsgProc()函数的区别。

导言:我深深地感觉到这个“Blank Window”是那么的复杂。为了一个黑屏,要调用很多很多函数。这也难怪我们的程序员要组成一个团队才能胜任游戏制作。

好了,上次我有个疑问。就是WndProc()函数和MsgProc()函数究竟是什么区别?带着这个问题,我发贴,问了好友,在多方的答案下,我终于得出了自己的见解。

其实WndProc()函数和MsgProc()函数大部分是相同的,只是命名上是不同的。在Win32程序中,我们可以看到,他们的函数原型都在WinMain()函数前面,所以我们可以这样认为,它是一个自定义的、人为的函数,我们甚至可以取消掉这个函数名重新命名自己喜欢的名字。

这次我学到了创建和显示Direct3D窗口。当然,我用到的还是这本书:

首先还是看代码:

Code:
  1. boolInitializeD3D(HWNDhWnd,boolfullscreen)
  2. {
  3. D3DDISPLAYMODEdisplayMode;
  4. //CreatetheD3Dobject.
  5. g_D3D=Direct3DCreate9(D3D_SDK_VERSION);
  6. if(g_D3D==NULL)returnfalse;
  7. //Getthedesktopdisplaymode.
  8. if(FAILED(g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&displayMode)))
  9. returnfalse;
  10. //SetupthestructureusedtocreatetheD3DDevice
  11. D3DPRESENT_PARAMETERSd3dpp;
  12. ZeroMemory(&d3dpp,sizeof(d3dpp));
  13. if(fullscreen)
  14. {
  15. d3dpp.Windowed=FALSE;
  16. d3dpp.BackBufferWidth=640;
  17. d3dpp.BackBufferHeight=480;
  18. }
  19. else
  20. d3dpp.Windowed=TRUE;
  21. d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
  22. d3dpp.BackBufferFormat=displayMode.Format;
  23. //CreatetheD3DDevice
  24. if(FAILED(g_D3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,
  25. D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_D3DDevice)))
  26. {
  27. returnfalse;
  28. }
  29. returntrue;
  30. }

InitializeD3D()这是作者自定义的一个函数,并不是系统内置的函数。它的参数是窗口句柄和是否全屏的逻辑变量。简单地来说,这个函数的结构用来创建D3D窗口的。具体的细节如下:

我这里谈两点:

1、使用“if (FAILED(...)) return false”结构可以很好地节约代码,而且能够达到判断是否成功。如果在“return false”前加一条语句cout<<"错误码(1009)"(当然这个是随便举的例子,win32程序是不能使cout简单地输出的。),就可以在运行的时候判断错误在哪里。

2、使用ZeroMemory()函数也是一个良好的习惯。因为你不知道将要创建装置所用的内存是否在初始时为0,如果不是0,那么在使用的时候难免会出一些莫名的错误。使用ZeroMemory()函数,就好像在放东西前清空一下箱子一样,可以避免损坏我们的电脑,因此这也是我大力推荐使用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值