1. 程式人生 > >DirectX學習之第一個可運行的工程

DirectX學習之第一個可運行的工程

fail 類名 clu rec clean msg img 1.0 ins

學習一門開發語言的第一件事情當然是搭建一個可運行的環境,然後運行一個可成功執行的案例。

本人在學習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學習之第一個可運行的工程