通过几天的学习,现在我终于能配置好DX的开发环境,和创建一个比较简单的DX窗口,下面是我的代码:
1.创建一个简单的DirectX3D窗口
//Add More H File …
#include
//Add More Lib
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
//Add More Global Variable …
#define Window_Class "Blank DirectX Window"
#define Window_Name "blank directx window"
//Add More DirectCreate Object And Direct3DDevice …
LPDIRECT3D9 g_D3D = NULL;
LPDIRECT3DDEVICE9 g_D3DDevice = NULL;
//Add More Function Prototypes …
bool InitailzeD3D(HWND hWnd,bool FullScreen);
void RenderScene();
void Shutdown();
LRESULT WINAPI MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYUP:
if(wParam == VK_ESCAPE)PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
//Add The Window Main
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,100,100,640,480,GetDesktopWindow(),NULL,wc.hInstance,NULL);
if(InitailzeD3D(hWnd,false))
{
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG msg;
ZeroMemory(&msg,sizeof(msg));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
RenderScene();
}
}
}
Shutdown();
UnregisterClass(Window_Class,wc.hInstance);
return 0;
}
//Add The Load Direct3DDevice
bool InitailzeD3D(HWND hWnd,bool FullScreen)
{
D3DDISPLAYMODE displayMode;
g_D3D = Direct3DCreate9(D3D_SDK_VERSION);
if(g_D3D == NULL) return false;
if(FAILED(g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&displayMode))) return false;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
if(FullScreen)
{
d3dpp.Windowed = FALSE;
d3dpp.BackBufferWidth = 640;
d3dpp.BackBufferHeight = 480;
}
else
{
d3dpp.Windowed = TRUE;
}
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = displayMode.Format;
if(FAILED(g_D3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_D3DDevice)))return false;
return true;
}
//Add The RenderScreen
void RenderScene()
{
g_D3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
g_D3DDevice->BeginScene();
g_D3DDevice->EndScene();
g_D3DDevice->Present(NULL,NULL,NULL,NULL);
}
//Add The Release
void Shutdown()
{
if(g_D3DDevice != NULL)
{
g_D3DDevice->Release();
g_D3DDevice = NULL;
}