1、我使用的是VS2005,想用MFC来建立一个Directx工程,看有些资料上说有新建“Directx工程”的项目,但是VS2005里面没有。应该如何在VS2005里建立一个Directx的MFC模板呢?2、看到Directx的一些例子都有过渡效果的按钮,那些按钮是怎么做的?各位来解答啊~~ O(∩_∩)O谢谢!

解决方案 »

  1.   

    建立一个win32项目 然后把下面代码打进
    #include <d3d9.h>
    #include <D3Dx9core.h>//-----------------------------------------------------------------------------
    // 全局变量
    //-----------------------------------------------------------------------------
    LPDIRECT3D9             g_pD3D       = NULL; //Direct3D对象
    LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; //Direct3D设备对象
    ID3DXMesh* Text = 0;
    WCHAR* CharToWChar(char* _Char)
    {
    size_t aLen = strlen(_Char)+1;
    int wLen = MultiByteToWideChar(CP_ACP,0,_Char,(int)aLen,NULL,0);
    WCHAR* _WChar = new WCHAR[wLen];
    MultiByteToWideChar(CP_ACP,0,_Char,(int)aLen,_WChar,wLen);
    return _WChar;
    }
    char* WCharToChar(WCHAR* _WChar)
    {
    size_t wLen = wcslen(_WChar)+1;
    int aLen = WideCharToMultiByte(CP_ACP,0,_WChar,(int)wLen,NULL,0,NULL,NULL);
    char* _Char = new char[aLen];
    WideCharToMultiByte(CP_ACP,0,_WChar,(int)wLen,_Char,aLen,NULL,NULL);
    return _Char;
    }//-----------------------------------------------------------------------------
    // Desc: 初始化Direct3D
    //-----------------------------------------------------------------------------
    HRESULT InitD3D( HWND hWnd )
    {
    //创建Direct3D对象, 该对象用来创建Direct3D设备对象
        if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
            return E_FAIL; //设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象
        D3DPRESENT_PARAMETERS d3dpp; 
        ZeroMemory( &d3dpp, sizeof(d3dpp) );
        d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; //创建Direct3D设备对象
        if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                          D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                          &d3dpp, &g_pd3dDevice ) ) )
        {
            return E_FAIL;
        } HDC hdc = CreateCompatibleDC( 0 ); // Fill out a LOGFONT structure that describes the font’s properties. LOGFONT lf; ZeroMemory(&lf, sizeof(LOGFONT)); lf.lfHeight = 25; // in logical units lf.lfWidth = 12; // in logical units lf.lfWeight = 500; // boldness, range 0(light) - 1000(bold) lf.lfItalic = false; lf.lfUnderline = false; lf.lfStrikeOut = false; lf.lfCharSet = DEFAULT_CHARSET; // // font style
    //WCHAR ch[]={L"华文彩艺"};
      // lf.lfFaceName=CharToWChar("华文彩艺");
    //wcstrcpy(lf.lfFaceName, ch);
    // Create a font and select that font with the device context. HFONT hFont; HFONT hFontOld; hFont = CreateFontIndirect(&lf); hFontOld = (HFONT)SelectObject(hdc, hFont); // Create the 3D mesh of text.
    D3DXCreateText(g_pd3dDevice, hdc, L"Direct3D", 0.001f, 0.4f, &Text, 0, 0); // Reselect the old font, and free resources. SelectObject(hdc, hFontOld); DeleteObject( hFont ); DeleteDC( hdc );
       return S_OK;
    }
    //-----------------------------------------------------------------------------
    // Desc: 释放创建对象
    //-----------------------------------------------------------------------------
    VOID Cleanup()
    {
    //释放Direct3D设备对象
        if( g_pd3dDevice != NULL) 
            g_pd3dDevice->Release(); //释放Direct3D对象
        if( g_pD3D != NULL)
            g_pD3D->Release();
    }
    //-----------------------------------------------------------------------------
    // Desc: 渲染图形
    //-----------------------------------------------------------------------------
    VOID Render()
    {
        //清空后台缓冲区
        g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 );
        
        //开始在后台缓冲区绘制图形
        if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
        {
            //在此在后台缓冲区绘制图形
    Text->DrawSubset( 0 );    
            //结束在后台缓冲区渲染图形
            g_pd3dDevice->EndScene();
        }    //将在后台缓冲区绘制的图形提交到前台缓冲区显示
        g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
    }
    //-----------------------------------------------------------------------------
    // Desc: 消息处理
    //-----------------------------------------------------------------------------
    LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
        switch( msg )
        {
            case WM_DESTROY:
                Cleanup();
                PostQuitMessage( 0 );
                return 0;        case WM_PAINT:
                Render();
                ValidateRect( hWnd, NULL );
                return 0;
        }    return DefWindowProc( hWnd, msg, wParam, lParam );
    }
    //-----------------------------------------------------------------------------
    // Desc: 程序入口
    //-----------------------------------------------------------------------------
    INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
    {
        //注册窗口类
        WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, 
                          GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                          L"ClassName", NULL };
        RegisterClassEx( &wc );    //创建窗口
        HWND hWnd = CreateWindow( L"ClassName", L"最简单的Direct3D程序", 
                                  WS_OVERLAPPEDWINDOW, 200, 100, 600, 500,
                                  NULL, NULL, wc.hInstance, NULL );    //初始化Direct3D
        if( SUCCEEDED( InitD3D( hWnd ) ) )
        { 
            //显示主窗口
    ShowWindow( hWnd, SW_SHOWDEFAULT );
    UpdateWindow( hWnd ); //进入消息循环
    MSG msg;
    ZeroMemory( &msg, sizeof(msg) );
    while( msg.message!=WM_QUIT )
    {
    if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
    {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
    }
    else
    {
    Render();  //渲染图形
    }
    }
        }    UnregisterClass( L"ClassName", wc.hInstance );
        return 0;
    }
    关于里面的控件  那是directX里面的控件  你看看相关的书就会知道了
      

  2.   

    Directx的MFC模板.......应该没有,只有自己建立MFC程序然后往里面添加代码,
    DXUT控件都是用图片画上去的,仔细看例子下面的CustomUI程序
      

  3.   


    这些代码的作用是什么?我是想做MFC开发Directx。
      

  4.   

    1、directx目前还没有像mfc那样封装过的类库,全是api,不是三言两语可以教会你的。买本基础书,然后下个开源引擎慢慢研究才是捷径。
    2、过渡效果(渐变)就是帧动画,比如一张图片在一秒内绘制25次,透明度从100%到0,你就会看到过渡效果。更多知识可以去查看“动画原理”。
      

  5.   

    强烈建议你不要现在就使用MFC,你最终还是要了解SDK的,MFC会浪费你很多无谓的时间。
      

  6.   

    直接用SDK。函数名不好记,多写代码,会发现很多问题
      

  7.   

    控件都是DXUT画得, 有sdk里面有专门得例子
      

  8.   


    我看到例子里的DXUT工具了,谢谢~