иницыализація окна в C++ и его окраска в Directx 9

Тема в разделе "Разработка игр и приложений к ним", создана пользователем darcest, 23 июл 2010.

  1. darcest

    darcest Гость

    Пытаюсь создать первую прогу на C++ и DirectX 9.
    Видемых ошибок нет,но прога не запускается.
    Если убрать строку 89 (запуск процедуры RenderingDirect3D()),то прога запускается ,но экран не прорисовуется с помощю директа(чего и следовало ожидать :lovecodeby: )
    исправте пожалуйста код,
    Или выложите код аналогичного простого примера,если есть.
    Зарание всем спасибо.
    Код (C++):
     #include <windows.h>
    #include <d3d9.h>
    #pragma comment (lib,"d3d9.lib")

    HINSTANCE hinst;
    HWND wndHandle;

    bool initWindow(HINSTANCE hInstance);

    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);


    LPDIRECT3D9 pDirect3D=NULL;
    IDirect3DDevice9* pDirect3DDevice=NULL;
    void RenderingDirect3D();



    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR IpCmdLine,int nShowCmd)
    {


    if(!initWindow(hInstance))
    return false;
    MSG msg;

    ZeroMemory(&msg,sizeof(msg));



    while(GetMessage(&msg,0,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }


    //WS_OVERLAPPEDWINDOWS|WS_VISIBLE,300,150,500,400,NULL,NULL,hinstance,NULL);
    return msg.wParam;

    }

    bool initWindow(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex;
    wcex.cbSize =sizeof(WNDCLASSEX);
    wcex.style=CS_HREDRAW|CS_VREDRAW;
    wcex.lpfnWndProc=(WNDPROC)WndProc;
    wcex.cbClsExtra=0;
    wcex.cbWndExtra=0;
    wcex.hInstance=hInstance;
    wcex.hIcon=0;
    wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName =NULL;
    wcex.lpszClassName=L"DirectXExample";
    wcex.hIconSm=0;
    RegisterClassEx(&wcex);


    wndHandle=CreateWindow(
    L"DirectXExample",
    L"DirectXExample",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    640,
    480,
    NULL,
    NULL,
    hInstance,
    NULL);
    if(!wndHandle)
    return false;
    ShowWindow(wndHandle,SW_SHOW);
    UpdateWindow(wndHandle);
    return true;

    }




    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch(message)
    {
    case WM_PAINT:
    RenderingDirect3D();
    ValidateRect(hWnd,NULL);
    break;
    case WM_DESTROY:
    {
    PostQuitMessage(0);
    return 0;

    } break;


    return DefWindowProc(hWnd, message, wParam, lParam);

    }  return (DefWindowProc(hWnd, message, wParam, lParam));

    //case WM_PAINT:
    //initialDirect3D(HWND hwnd);
    // ValidateRect(hwnd,NULL);

    return 0;
    }


    HRESULT initialDirect3D(HWND hwnd)
    {
    if(NULL ==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION)))
    return E_FAIL;
    D3DDISPLAYMODE* Display;
    if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,Display)))
    return E_FAIL;
    D3DPRESENT_PARAMETERS Direct3DParametr;
    ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr));
    Direct3DParametr.Windowed=TRUE;
    Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD;

    return E_FAIL;;
    return S_OK;
    }


    void RenderingDirect3D()
    {
    //IDirect3DDevice9::Clear;
    pDirect3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(25,25,0),1.0f,0);
    pDirect3DDevice->BeginScene();
    pDirect3DDevice->EndScene();
    pDirect3DDevice->Present(NULL,NULL,NULL,NULL);
    //return 0;
    }
     
  2. nnemo

    nnemo Гость

Загрузка...

Поделиться этой страницей