游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4174|回复: 13

这是什么DirectX入门代码,好奇怪!

[复制链接]

28

主题

73

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2009-9-18 22:48:00 | 显示全部楼层 |阅读模式
从某网站看到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-&gtresent( NULL, NULL, NULL, NULL );
206: }

32

主题

235

帖子

235

积分

中级会员

Rank: 3Rank: 3

积分
235
发表于 2009-9-19 00:13:00 | 显示全部楼层

Re:这是什么DirectX入门代码,好奇怪!

哪里奇怪?为什么奇怪?我觉得你问的也很奇怪哈。玩笑

42

主题

140

帖子

158

积分

注册会员

Rank: 2

积分
158
发表于 2009-9-19 09:30:00 | 显示全部楼层

Re:这是什么DirectX入门代码,好奇怪!

windows窗口程序都要这么创建啊

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2009-9-19 17:12:00 | 显示全部楼层

Re:这是什么DirectX入门代码,好奇怪!

有啥奇怪,再普通不过。

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2009-9-19 23:49:00 | 显示全部楼层

Re:这是什么DirectX入门代码,好奇怪!

我奇怪的是哪里奇怪....

19

主题

561

帖子

581

积分

高级会员

Rank: 4

积分
581
发表于 2009-9-20 11:33:00 | 显示全部楼层

Re:这是什么DirectX入门代码,好奇怪!

好奇LZ所觉得奇怪的地方……

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-9-20 12:21:00 | 显示全部楼层

Re:这是什么DirectX入门代码,好奇怪!

一般都是这样啊,哪奇怪了
这是用API写的,难道LZ是用MFC的??

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2009-9-22 15:29:00 | 显示全部楼层

Re:这是什么DirectX入门代码,好奇怪!

LZ 很奇怪....

6

主题

26

帖子

30

积分

注册会员

Rank: 2

积分
30
发表于 2009-9-23 01:01:00 | 显示全部楼层

Re:这是什么DirectX入门代码,好奇怪!

给网站做广告?

13

主题

63

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2009-9-24 23:37:00 | 显示全部楼层

Re: 这是什么DirectX入门代码,好奇怪!

对啊,很正常的D3D窗口框架嘛,没什么奇怪的啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-20 04:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表