|
从某网站看到DX入门教程,里面有如下代码,我觉得好奇怪,怎么回事?
13:
14: #define STRICT
15: #define WIN32_LEAN_AND_MEAN
16: #include <windows.h>
17:
18: // Link D3D
19: #include <d3d9.h>
20: #pragma comment(lib, "d3d9.lib")
21:
22: #define Release_Safe(p){if(p!=NULL) p->Release();}
23:
24: #define WINDOW_TITLE "www.csinx.org - Initializing D3D Window (DX9+VC7)"
25: #define WINDOW_WIDTH 800
26: #define WINDOW_HEIGHT 600
27:
28: //-----------------------------------------------------------------------------
29: // GLOBALS
30: //-----------------------------------------------------------------------------
31: HWND g_hWnd = NULL;
32: LPDIRECT3D9 g_pD3D = NULL;
33: LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
34:
35: //-----------------------------------------------------------------------------
36: // PROTOTYPES
37: //-----------------------------------------------------------------------------
38: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow);
39: LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
40: void InitD3D(void);
41: void ShutDown(void);
42: void Render(void);
43:
44: //-----------------------------------------------------------------------------
45: // Name: WinMain()
46: // Desc: The application's entry point
47: //-----------------------------------------------------------------------------
48: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) 49: {
50: WNDCLASSEX winClass;
51: MSG uMsg;
52: memset(&uMsg,0,sizeof(uMsg));
53:
54: winClass.lpszClassName = "CLASS_INITD3D_WINDOW";
55: winClass.cbSize = sizeof(WNDCLASSEX);
56: winClass.style = CS_HREDRAW | CS_VREDRAW;
57: winClass.lpfnWndProc = WindowProc;
58: winClass.hInstance = hInstance;
59: winClass.hIcon = LoadIcon(hInstance, (LPCTSTR)NULL);
60: winClass.hIconSm = LoadIcon(hInstance, (LPCTSTR)NULL);
61: winClass.hCursor = LoadCursor(NULL, IDC_ARROW);
62: winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
63: winClass.lpszMenuName = NULL;
64: winClass.cbClsExtra = 0;
65: winClass.cbWndExtra = 0;
66:
67: if( !RegisterClassEx(&winClass) )
68: return E_FAIL;
69:
70: g_hWnd = CreateWindowEx( NULL, "CLASS_INITD3D_WINDOW",
71: WINDOW_TITLE,
72: WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0,
73: WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL,
74: hInstance, NULL );
75:
76: if( g_hWnd == NULL )
77: return E_FAIL;
78:
79: // Adjust window
80: RECT rect = { 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT };
81: AdjustWindowRect( &rect, GetWindowLong( g_hWnd, GWL_STYLE ), FALSE );
82: SetWindowPos( g_hWnd, 0, 0, 0, rect.right - rect.left, rect.bottom - rect.top,
83: SWP_NOZORDER | SWP_NOMOVE );
84:
85: ShowWindow( g_hWnd, nCmdShow );
86: UpdateWindow( g_hWnd );
87:
88: // Init D3D
89: InitD3D();
90:
91: while( uMsg.message != WM_QUIT )
92: {
93: if( PeekMessage( &uMsg, NULL, 0, 0, PM_REMOVE ) )
94: {
95: TranslateMessage( &uMsg );
96: DispatchMessage( &uMsg );
97: }
98: else
99: {
100: // Render a frame
101: Render();
102: }
103: }
104:
105: ShutDown();
106:
107: UnregisterClass( "CLASS_INITD3D_WINDOW", winClass.hInstance );
108:
109: return uMsg.wParam;
110: }
111:
112: //-----------------------------------------------------------------------------
113: // Name: WindowProc()
114: // Desc: The window's message handler
115: //-----------------------------------------------------------------------------
116: LRESULT CALLBACK WindowProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
117: {
118: switch( msg )
119: {
120: case WM_KEYDOWN: 121: {
122: switch( wParam )
123: {
124: case VK_ESCAPE:
125: PostQuitMessage(0);
126: break;
127: }
128: }
129: break;
130:
131: case WM_CLOSE: 132: {
133: PostQuitMessage(0);
134: }
135:
136: case WM_DESTROY: 137: {
138: PostQuitMessage(0);
139: }
140: break;
141:
142: default: 143: {
144: return DefWindowProc( hWnd, msg, wParam, lParam );
145: }
146: break;
147: }
148:
149: return 0;
150: }
151:
152: //-----------------------------------------------------------------------------
153: // Name: InitD3D()
154: // Desc: Initialize Direct 3D
155: //-----------------------------------------------------------------------------
156: void InitD3D( void ) 157: {
158: // Create D3D
159: g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
160: if( !g_pD3D )
161: {
162: return;
163: }
164:
165: // Fill parameters
166: D3DPRESENT_PARAMETERS d3dpp;
167: ZeroMemory(&d3dpp, sizeof(d3dpp));
168: d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
169: d3dpp.Windowed = TRUE;
170:
171: // Create D3D device
172: if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
173: g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
174: &d3dpp, &g_pd3dDevice ) ) )
175: {
176: return;
177: }
178: }
179:
180: //-----------------------------------------------------------------------------
181: // Name: ShutDown()
182: // Desc: Release all
183: //-----------------------------------------------------------------------------
184: void ShutDown( void ) 185: {
186: Release_Safe(g_pd3dDevice);
187: Release_Safe(g_pD3D);
188: }
189:
190: //-----------------------------------------------------------------------------
191: // Name: Render()
192: // Desc: Render something you want
193: //-----------------------------------------------------------------------------
194: void Render( void ) 195: {
196: // Clear screen with D3DCOLOR_XRGB(255, 0, 255)
197: g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 0, 255), 1.0f, 0 );
198:
199: g_pd3dDevice->BeginScene();
200:
201: // Render geometry here...
202:
203: g_pd3dDevice->EndScene();
204:
205: g_pd3dDevice-> resent( NULL, NULL, NULL, NULL );
206: }
|
|