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

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

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

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

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

首先还是看代码:

Code:
  1. bool InitializeD3D(HWND hWnd, bool fullscreen)   
  2. {   
  3.    D3DDISPLAYMODE displayMode;   
  4.   
  5.    // Create the D3D object.   
  6.    g_D3D = Direct3DCreate9(D3D_SDK_VERSION);   
  7.    if(g_D3D == NULL) return false;   
  8.   
  9.    // Get the desktop display mode.   
  10.    if(FAILED(g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &displayMode)))   
  11.       return false;   
  12.   
  13.    // Set up the structure used to create the D3DDevice   
  14.    D3DPRESENT_PARAMETERS d3dpp;   
  15.    ZeroMemory(&d3dpp, sizeof(d3dpp));   
  16.   
  17.    if(fullscreen)   
  18.       {   
  19.          d3dpp.Windowed = FALSE;   
  20.          d3dpp.BackBufferWidth = 640;   
  21.          d3dpp.BackBufferHeight = 480;   
  22.       }   
  23.    else  
  24.       d3dpp.Windowed = TRUE;   
  25.    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;   
  26.    d3dpp.BackBufferFormat = displayMode.Format;   
  27.   
  28.    // Create the D3DDevice   
  29.    if(FAILED(g_D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,   
  30.              D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_D3DDevice)))   
  31.       {   
  32.          return false;   
  33.       }   
  34.    return true;   
  35. }   
  36.   

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

我这里谈两点:

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

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

你可能感兴趣的:(游戏,null,Direct3D)