手寫Tutorial 01例子是創(chuàng)建Windows窗口,并創(chuàng)建D3D設備。
97行,PeekMessage(&msg , 0 , 0 , 0 , PM_REMOVE)第二個參數(shù)如果改成PeekMessage(&msg , hWnd , 0 , 0 , PM_REMOVE)就會出現(xiàn)無法退出程序的問題!請注意!
44行,g_pd3dDevice->Present(0 , 0 , 0 , 0);這句話千萬不要漏掉哦!否則就會顯示花瓶!
97行,PeekMessage(&msg , 0 , 0 , 0 , PM_REMOVE)第二個參數(shù)如果改成PeekMessage(&msg , hWnd , 0 , 0 , PM_REMOVE)就會出現(xiàn)無法退出程序的問題!請注意!
44行,g_pd3dDevice->Present(0 , 0 , 0 , 0);這句話千萬不要漏掉哦!否則就會顯示花瓶!
??1
#include?<d3dx9.h>
??2
??3
#define?SAFE_RELEASE(o)?{if(o){o->Release();o=0;}}
??4
??5
LPDIRECT3D9?g_pD3D?=?0;
??6
LPDIRECT3DDEVICE9?g_pd3dDevice?=?0;
??7
??8
//?創(chuàng)建D3D設備
??9
HRESULT?InitD3D(HWND?hWnd)
?10

{
?11
????//?創(chuàng)建D3D?SDK
?12
????if(NULL?==?(g_pD3D?=?Direct3DCreate9(D3D_SDK_VERSION)))
?13
????????return?E_FAIL;
?14
?15
?16
????D3DPRESENT_PARAMETERS?d3dpp;
?17
????memset(&d3dpp?,?0?,?sizeof(d3dpp));
?18
????d3dpp.Windowed?=?true;
?19
????d3dpp.BackBufferFormat?=?D3DFMT_UNKNOWN;
?20
????d3dpp.SwapEffect?=?D3DSWAPEFFECT_DISCARD;
?21
?22
????RECT?rect;
?23
????GetClientRect(hWnd?,?&rect);
?24
????d3dpp.BackBufferWidth?=?rect.right?-?rect.left;
?25
????d3dpp.BackBufferHeight?=?rect.bottom?-?rect.top;
?26
?27
????if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT
?28
????????,?D3DDEVTYPE_HAL
?29
????????,?hWnd
?30
????????,?D3DCREATE_HARDWARE_VERTEXPROCESSING
?31
????????,?&d3dpp?,?&g_pd3dDevice
?32
????????)))
?33
????????return?E_FAIL;
?34
????
?35
????return?S_OK;
?36
}
?37
?38
//?渲染
?39
void?Render()
?40

{
?41
????//?清空成藍色
?42
????g_pd3dDevice->Clear(0?,?0?,?D3DCLEAR_TARGET?,?D3DCOLOR_XRGB(0?,?0?,?255)?,?1.0f?,?0);
?43
????//?顯示
?44
????g_pd3dDevice->Present(0?,?0?,?0?,?0);
?45
}
?46
?47
//?清除占有的內(nèi)存
?48
void?CleanUp()
?49

{
?50
????SAFE_RELEASE(g_pD3D);
?51
}
?52
?53
//?消息處理
?54
LRESULT?WINAPI?MsgProc(HWND?hWnd?,?UINT?message?,?WPARAM?wParam?,?LPARAM?lParam)
?55

{
?56
????switch(message)
?57
????
{
?58
????case?WM_DESTROY:
?59
????????CleanUp();
?60
????????PostQuitMessage(0);
?61
????????return?0;
?62
????????break;
?63
????default:
?64
????????break;
?65
????}
?66
????return?DefWindowProc(hWnd,?message?,?wParam?,?lParam);
?67
}
?68
?69
//?Windows入口
?70
int?WINAPI?WinMain(IN?HINSTANCE?hInstance,?IN?HINSTANCE?hPrevInstance,?IN?LPSTR?lpCmdLine,?IN?int?nShowCmd)
?71

{
?72
????WNDCLASS?wndClass;
?73
????memset(&wndClass?,?0?,?sizeof(wndClass));
?74
????wndClass.hInstance?=?hInstance;
?75
????wndClass.lpszClassName?=?"Tutorial01";
?76
????wndClass.style?=?0;
?77
????wndClass.lpfnWndProc?=?MsgProc;
?78
????//?注冊窗口類
?79
????RegisterClass(&wndClass);
?80
?81
????//?創(chuàng)建窗口
?82
????HWND?hWnd?=?CreateWindow("Tutorial01"?,?"Tutorial01?:?CreateDevice"?,?WS_OVERLAPPEDWINDOW?
?83
????????,?0?,?0?,?512?,?512?,?GetDesktopWindow()
?84
????????,?0?,?wndClass.hInstance?,?0);
?85
?86
????//?顯示窗口
?87
????ShowWindow(hWnd?,?SW_SHOWDEFAULT);
?88
????UpdateWindow(hWnd);
?89
?90
????if(SUCCEEDED(InitD3D(hWnd)))
?91
????
{
?92
????????//?消息循環(huán)
?93
????????MSG?msg;
?94
????????memset(&msg?,?0?,?sizeof(msg));
?95
????????while(msg.message?!=?WM_QUIT)
?96
????????
{
?97
????????????if(PeekMessage(&msg?,?0?,?0?,?0?,?PM_REMOVE))
?98
????????????
{
?99
????????????????DispatchMessage(&msg);
100
????????????????TranslateMessage(&msg);
101
????????????}
102
????????????else
103
????????????
{
104
????????????????Render();
105
????????????}
106
????????}
107
????}
108
109
????CleanUp();
110
????UnregisterClass("Tutorial01"?,?wndClass.hInstance);
111
????return?0;
112
}
113
114
115

??2

??3

??4

??5

??6

??7

??8

??9

?10



?11

?12

?13

?14

?15

?16

?17

?18

?19

?20

?21

?22

?23

?24

?25

?26

?27

?28

?29

?30

?31

?32

?33

?34

?35

?36

?37

?38

?39

?40



?41

?42

?43

?44

?45

?46

?47

?48

?49



?50

?51

?52

?53

?54

?55



?56

?57



?58

?59

?60

?61

?62

?63

?64

?65

?66

?67

?68

?69

?70

?71



?72

?73

?74

?75

?76

?77

?78

?79

?80

?81

?82

?83

?84

?85

?86

?87

?88

?89

?90

?91



?92

?93

?94

?95

?96



?97

?98



?99

100

101

102

103



104

105

106

107

108

109

110

111

112

113

114

115
