| 
 | 
 
 
 楼主 |
发表于 2003-12-4 12:08:00
|
显示全部楼层
 
 
 
代码如下!
#include <d3d8.h> 
 
LPDIRECT3D8             g_pD3D       = NULL; // 用来创建D3D设备 
LPDIRECT3DDEVICE8       g_pd3dDevice = NULL; // D3D设备 
 
// 初始化D3D 
HRESULT InitD3D( HWND hWnd ) 
{ 
        // 创建D3D对象 
        if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) ) 
                return E_FAIL; 
 
        // 获取当前的显示模式 
        D3DDISPLAYMODE d3ddm; 
        if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) ) 
                return E_FAIL; 
 
        D3DPRESENT_PARAMETERS d3dpp;  
        ZeroMemory( &d3dpp, sizeof(d3dpp) ); 
        d3dpp.Windowed = TRUE;                                // 窗口模式 
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;        // 设置交换模式 
        d3dpp.BackBufferFormat = d3ddm.Format;                // 设置背景缓冲区格式为当前左面格式 
 
        // 创建D3D设备 
        // 第一个参数:使用默认的显卡适配器 
        // 第二个参数:请求使用硬件抽象层(HAL) 
        // 第三个参数:窗口句柄 
        // 第四个参数:使用软件处理顶点 
        // 第五个参数:创建的参数 
        // 第六个参数:创建的D3D设备指针 
        if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,  
                                          D3DDEVTYPE_HAL,  
                                          hWnd, 
                                          D3DCREATE_SOFTWARE_VERTEXPROCESSING, 
                                          &d3dpp,  
                                          &g_pd3dDevice ) ) ) 
        { 
                return E_FAIL; 
        } 
 
        return S_OK; 
} 
 
// 释放D3D 
VOID Cleanup() 
{ 
        if( g_pd3dDevice != NULL)  
                g_pd3dDevice->Release(); 
 
        if( g_pD3D != NULL) 
                g_pD3D->Release(); 
} 
 
// 渲染 
VOID Render() 
{ 
        if( NULL == g_pd3dDevice ) 
                return; 
 
        // 清除背景为兰色 
        g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 ); 
 
        // 开始绘制场景 
        g_pd3dDevice->BeginScene(); 
 
        // 这里绘制你需要的东西 
 
        // 结束场景绘制 
        g_pd3dDevice->EndScene(); 
 
        // 显示到屏幕上 
        g_pd3dDevice-> resent( NULL, NULL, NULL, NULL ); 
} 
 
 
// 消息处理 
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) 
{ 
        switch( msg ) 
        { 
                case WM_DESTROY:        // 退出消息 
                        PostQuitMessage( 0 ); 
                        return 0; 
 
                case WM_PAINT:                // 绘制 
                        Render(); 
                        ValidateRect( hWnd, NULL ); 
                        return 0; 
        } 
 
        return DefWindowProc( hWnd, msg, wParam, lParam ); 
} 
 
// WinMain程序入口 
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) 
{ 
        // 注册窗口类 
        WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,  
                          GetModuleHandle(NULL), NULL, NULL, NULL, NULL, 
                          "DX Project 1", NULL }; 
        RegisterClassEx( &wc ); 
 
        // 创建窗口 
        HWND hWnd = CreateWindow( "DX Project 1", "DX Project 1: CreateDevice",  
                                  WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, 
                                  GetDesktopWindow(), NULL, wc.hInstance, NULL ); 
 
        // 初始化D3D 
        if( SUCCEEDED( InitD3D( hWnd ) ) ) 
        {  
                // 显示窗口 
                ShowWindow( hWnd, SW_SHOWDEFAULT ); 
                UpdateWindow( hWnd ); 
 
                // 消息循环 
                MSG msg;  
                while( GetMessage( &msg, NULL, 0, 0 ) ) 
                { 
                        TranslateMessage( &msg ); 
                        DispatchMessage( &msg ); 
                } 
        } 
 
        // 结束处理 
        Cleanup(); 
        UnregisterClass( "DX Project 1", wc.hInstance ); 
        return 0; 
} |   
 
 
 
 |