DirectX 9 - nie wyświetla tła

0

witam! rozpoczynam programowanie w directx i niestety kod, który ma za zadanie nie wyświetla niebieskiego tła... progeam się kompiluje, ale ma domyślne tło windows'owe.

nie mogę doszukać się błędu. Co może być nie tak? Za każdą pomoc z góry dzięki ;-)

 #include <d3d9.h>
 
//DEKLARACJA FUNKCJI OBSŁUGI KOMUNIKATÓW
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
LPDIRECT3D9       g_pD3D       = NULL; //obiekt dający dostęp do innych funkcji dx3d
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;//obiekt dający dostęp do funkcji renderujących
 
int WINAPI WinMain (HINSTANCE hThisInstance, 
                    HINSTANCE hPrevInstance, 
                    LPSTR lpszArgument, 
                    int nFunsterStil)//główna funkcja aplikacji win32
{
    HWND hwnd;               //deklarujemy zmienną okna
    MSG messages;            //zmienna komunikatów okna
    WNDCLASSEX wincl;        //struktura danych okna
 
    //wypełniamy strukturę okna
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = "WindowsApp";
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS; //obsługa podwójnego kliknięcia
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    //rejestrujemy w systemie klasę okna
    if (!RegisterClassEx (&wincl)) return 0;
 
    hwnd = CreateWindowEx (
           0,//zawsze 0
           "WindowsApp", //nazwa klasy z danymi okna
           "Windows App",//tytuł okna                   
           WS_OVERLAPPEDWINDOW|WS_VISIBLE,//styl okna 
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
 
    //pętla obsługi komunikatów
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}
 
HRESULT InitD3D(HWND hwnd)
{
        g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);//ładujemy do obiektu DX obecną wersję DX na kompie
        D3DDISPLAYMODE d3ddm;//struktura zawierająca parametry wyświetlania
        g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);//przypisujemy tej strukturze domyślny wyświetlacz
 
        D3DPRESENT_PARAMETERS d3dpp;//struktura parametrów rysowania
        ZeroMemory(&d3dpp, sizeof(d3dpp) );//resetujemy zawartość tej struktury
        d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = d3ddm.Format;
 
        g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice );
 
       return S_OK;
}
 
void Render()
{
 
     g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
     g_pd3dDevice->BeginScene();
     g_pd3dDevice->EndScene();
 
     g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
 
void Cleanup()
{
    if( g_pd3dDevice != NULL)
        g_pd3dDevice->Release();
    if( g_pD3D != NULL)
        g_pD3D->Release();
}
 
 
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//funkcja obsługi komunikatów
{
    switch (message)
    {
        case WM_CREATE:
             InitD3D(hwnd);
             Render();
             Cleanup();
            break;
 
        case WM_DESTROY:
            PostQuitMessage (0); 
            break;
 
 
        default: 
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}
 
0

A po co dwa razy ?

0

bo 1 z moich tematów jest w koszu.

Czy wie ktoś, na czym polega problem w moim kodzie?

0

oki, problem juz rozwiązany :) wystarczyło zamienić WM_CREATE na WM_PAINT.

1 użytkowników online, w tym zalogowanych: 0, gości: 1