?

??1 #include < d3dx9.h >
??2 #include < d3d9.h >
??3
??4
??5
??6 #pragma?comment(lib, " d3dx9.lib " )
??7 #pragma?comment(lib, " d3d9.lib " )
??8 ?
??9
?10 #define ?MAX_LOADSTRING?100
?11
?12
?13 HINSTANCE?hInst;????????
?14 TCHAR?szTitle[MAX_LOADSTRING] = TEXT( " D3D " );
?15 TCHAR?szWindowClass[MAX_LOADSTRING] = TEXT( " HelloD3D " );??
?16
?17
?18
?19 ATOM????MyRegisterClass(HINSTANCE?hInstance);
?20 BOOL????InitInstance(HINSTANCE,? int );
?21 LRESULT?CALLBACK?WndProc(HWND,?UINT,?WPARAM,?LPARAM);
?22
?23
?24
?25 HWND?g_hWnd = NULL;
?26
?27 IDirect3D9? * pD3D = NULL;
?28 IDirect3DDevice9? * pDevice = NULL;
?29
?30
?31 bool ?InitD3D();
?32 void ?Release();
?33 void ?Render();
?34
?35
?36
?37 int ?APIENTRY?WinMain(HINSTANCE?hInstance,
?38 ?????????????????????HINSTANCE?hPrevInstance,
?39 ?????????????????????LPSTR?????lpCmdLine,
?40 ????????????????????? int ???????nCmdShow)
?41 {
?42 ??MSG?msg;
?43
?44 ??MyRegisterClass(hInstance);
?45
?46 ?? if ?( ! InitInstance?(hInstance,?nCmdShow))
?47 ?? {
?48 ?? return ?FALSE;
?49 ??}

?50
?51 ?? if ( ! InitD3D())
?52 ?? {
?53 ??? return ? - 1 ;
?54 ??}

?55
?56 ??ZeroMemory( & msg, sizeof (msg));
?57
?58 ?? while ?(msg.message != WM_QUIT)
?59 ?? {
?60 ???? if (PeekMessage( & msg,NULL, 0 , 0 ,PM_REMOVE))
?61 ???? {
?62 ?????TranslateMessage( & msg);
?63 ?????DispatchMessage( & msg);
?64 ?
?65 ????}

?66 ???? else
?67 ???? {
?68 ???Render();
?69 ????}

?70 ??}

?71
?72 ?? return ?( int )msg.wParam;
?73 }

?74
?75
?76 ATOM?MyRegisterClass(HINSTANCE?hInstance)
?77 {
?78 ?WNDCLASSEX?wcex;
?79
?80 ?wcex.cbSize? = ? sizeof (WNDCLASSEX);
?81
?82 ?wcex.style??? = ?CS_HREDRAW? | ?CS_VREDRAW;
?83 ?wcex.lpfnWndProc? = ?(WNDPROC)WndProc;
?84 ?wcex.cbClsExtra?? = ? 0 ;
?85 ?wcex.cbWndExtra?? = ? 0 ;
?86 ?wcex.hInstance?? = ?hInstance;
?87 ?wcex.hIcon??? = ?NULL;
?88 ?wcex.hCursor?? = ?LoadCursor(NULL,?IDC_ARROW);
?89 ?wcex.hbrBackground? = ?(HBRUSH)(COLOR_WINDOW + 1 );
?90 ?wcex.lpszMenuName? = ?NULL;
?91 ?wcex.lpszClassName? = ?szWindowClass;
?92 ?wcex.hIconSm?? = ?NULL;
?93 ? return ?RegisterClassEx( & wcex);
?94 }

?95
?96
?97 BOOL?InitInstance(HINSTANCE?hInstance,? int ?nCmdShow)
?98 {
?99 ???HWND?hWnd;
100
101 ???hInst? = ?hInstance;
102
103 ???hWnd? = ?CreateWindow(szWindowClass,?szTitle,?WS_OVERLAPPEDWINDOW,
104 ??????CW_USEDEFAULT,? 0 ,?CW_USEDEFAULT,? 0 ,?NULL,?NULL,?hInstance,?NULL);
105
106 ??? if ?( ! hWnd)
107 ??? {
108 ?????? return ?FALSE;
109 ???}

110
111 ???g_hWnd = hWnd;
112
113 ???ShowWindow(hWnd,?nCmdShow);
114 ???UpdateWindow(hWnd);
115
116 ??? return ?TRUE;
117 }

118
119
120 LRESULT?CALLBACK?WndProc(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
121 {
122 ? switch ?(message)
123 ? {
124 ?? case ?WM_DESTROY:
125 ???Release();
126 ???PostQuitMessage( 0 );
127 ??? break ;
128 ?? default :
129 ??? return ?DefWindowProc(hWnd,?message,?wParam,?lParam);
130 ???}

131 ??? return ? 0 ;
132 }

133
134
135 void ?Release()
136 {
137 ? if (pDevice != NULL)
138 ??pDevice -> Release();
139 ? if (pD3D != NULL)
140 ??pD3D -> Release();
141 }

142
143
144 bool ?InitD3D()
145 {
146 ??pD3D = Direct3DCreate9(D3D_SDK_VERSION);
147
148 ?? if (pD3D == NULL)
149 ?? {
150 ???MessageBox(NULL,TEXT( " pD3D?init?failed " ),TEXT( " error " ),MB_OK);
151 ??? return ? false ;
152 ??}

153
154 ??D3DPRESENT_PARAMETERS?d3dpp;
155
156 ??ZeroMemory(? & d3dpp,? sizeof (d3dpp)?);
157 ??d3dpp.Windowed??? = ?TRUE;
158 ??d3dpp.SwapEffect? = ?D3DSWAPEFFECT_COPY;
159
160
161
162 ??HRESULT?hr;
163 ??hr = pD3D -> CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,
164 ?????g_hWnd,
165 ?????D3DCREATE_SOFTWARE_VERTEXPROCESSING,
166 ????? & d3dpp,
167 ????? & pDevice);
168
169 ?? if (FAILED(hr))
170 ?? {
171 ???MessageBox(NULL,TEXT( " create?device?failed " ),TEXT( " error " ),MB_OK);
172 ??? return ? false ;
173 ??}

174
175 ?? return ? true ;
176 }

177
178
179
180 void ?Render()
181 {
182 ? if (pDevice == NULL)
183 ? {
184 ? return ?;
185 ?}

186
187 ?pDevice -> Clear( 1 ,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB( 0 , 0 , 0 ), 1.0f , 0 );
188
189 ?pDevice -> Present(NULL,NULL,NULL,NULL);
190
191 }

192
193