码迷,mamicode.com
首页 > 其他好文 > 详细

DirectX学习之第一个可运行的工程

时间:2019-03-02 10:30:21      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:code   line   reg   开发   param   amp   cleanup   directx   handle   

学习一门开发语言的第一件事情当然是搭建一个可运行的环境,然后运行一个可成功执行的案例。

本人在学习DirectX的第一个工程的时候,参考了雨凇MoMo的一篇文章(https://www.xuanyusong.com/archives/802),但是看了之后,还是不知道如何才能运行起来。

然后,又参考了一篇文章(https://blog.csdn.net/chenwu_843402773/article/details/8077935)。

通过参考第二篇文章中的一些内容,最终把第一篇文章中的案例运行了起来,在此做一下记录,具体原理,相信随着学习 Direct 的逐渐升入,会理解的,现在不做过多说明,哈哈哈哈哈哈。。。

  1 #include<d3d9.h>
  2 
  3 #define WINDOW_CLASS "UGPDX"                    //宏定义窗口类名称
  4 #define WINDOW_NAME  "MyFirstDirectProject"     //宏定义窗口名称
  5 
  6 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
  7 LPDIRECT3D9            g_pD3D = NULL;         
  8 LPDIRECT3DDEVICE9    g_pDevice = NULL;     
  9 HRESULT InitD3D(HWND hwnd);
 10 void Cleanup();
 11 void Render();
 12 
 13 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)
 14 {
 15     WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
 16         GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
 17         WINDOW_CLASS, NULL };
 18     RegisterClassEx(&wc);      
 19 
 20     HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME, WS_OVERLAPPEDWINDOW,
 21         100, 100, 640, 480, GetDesktopWindow(), NULL,
 22         wc.hInstance, NULL);
 23 
 24 
 25     if (InitD3D(hWnd) == S_OK)
 26     {
 27         ShowWindow(hWnd, SW_SHOWDEFAULT);
 28         UpdateWindow(hWnd);
 29 
 30         MSG msg;
 31         ZeroMemory(&msg, sizeof(msg));
 32 
 33         while (msg.message != WM_QUIT)
 34         {
 35             if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
 36             {
 37                 TranslateMessage(&msg);
 38                 DispatchMessage(&msg);
 39             }
 40             else
 41             {
 42                 Render();
 43             }
 44         }
 45     }
 46 
 47     UnregisterClass(WINDOW_CLASS, wc.hInstance);
 48 
 49     return 0;
 50 }
 51 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 52 {
 53     switch (msg)
 54     {
 55     case WM_DESTROY:
 56         PostQuitMessage(0);
 57         return 0;
 58         break;
 59 
 60     case WM_KEYUP:
 61         if (wParam == VK_ESCAPE) PostQuitMessage(0);
 62         break;
 63     }
 64 
 65     return DefWindowProc(hWnd, msg, wParam, lParam);
 66 }
 67 
 68 HRESULT InitD3D(HWND hwnd)
 69 {
 70     if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
 71     {
 72         return E_FAIL;
 73     }
 74 
 75     D3DPRESENT_PARAMETERS d3dpparams;
 76     ZeroMemory(&d3dpparams, sizeof(d3dpparams));
 77     d3dpparams.Windowed = true;
 78     d3dpparams.SwapEffect = D3DSWAPEFFECT_DISCARD;
 79     d3dpparams.BackBufferFormat = D3DFMT_UNKNOWN;
 80 
 81     if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
 82         D3DDEVTYPE_HAL,
 83         hwnd,
 84         D3DCREATE_SOFTWARE_VERTEXPROCESSING,
 85         &d3dpparams,
 86         &g_pDevice)))
 87     {
 88         return E_FAIL;
 89     }
 90 
 91     return S_OK;
 92 }
 93 
 94 void Cleanup()
 95 {
 96     if (NULL != g_pDevice)
 97     {
 98         g_pDevice->Release();
 99     }
100     if (NULL != g_pD3D)
101     {
102         g_pD3D->Release();
103     }
104 }
105 
106 
107 void Render()
108 {
109     if (NULL == g_pDevice)
110     {
111         return;
112     }
113 
114     g_pDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(30, 60, 90), 1.0f, 0);
115 
116     if (SUCCEEDED(g_pDevice->BeginScene()))
117     {
118         g_pDevice->EndScene();
119     }
120 
121     g_pDevice->Present(NULL, NULL, NULL, NULL);
122 }

运行结果:

技术图片

 

DirectX学习之第一个可运行的工程

标签:code   line   reg   开发   param   amp   cleanup   directx   handle   

原文地址:https://www.cnblogs.com/luguoshuai/p/10459508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!