Program kompiluje się, lecz okienku zaraz ucieka, gdyż coś nie tak jest z create device (sprawdzam go za pomocą FAILED i niestety wynik jest pozytywny;/). Poniżej kod programu:
#include <d3dx9.h>
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
//zmienne directx
IDirect3D9* pD3D;
IDirect3DDevice9* pDev;
//nazwa obiektu okna
TCHAR NazwaOkna[]="NazwaOkna";
//procedura zdarzeniowa okna
LRESULT CALLBACK WindowEventProc(HWND hWindow, UINT umsg, WPARAM wParam, LPARAM lParam)
{
switch(umsg)
{
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWindow,umsg,wParam,lParam);
}
////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
//rejestracja klasy okna - wpisanie wartosci
WNDCLASSEX KlasaOkna;
//wyczyszczenie miejsca na klase
ZeroMemory(&KlasaOkna, sizeof(WNDCLASSEX));
KlasaOkna.cbSize=sizeof(WNDCLASSEX);
KlasaOkna.hInstance=hInstance;
KlasaOkna.lpfnWndProc=WindowEventProc;
KlasaOkna.lpszClassName=NazwaOkna;
KlasaOkna.hCursor=LoadCursor(NULL, IDC_ARROW);
KlasaOkna.hIcon=LoadIcon(NULL, IDI_APPLICATION);
KlasaOkna.hbrBackground=(HBRUSH) COLOR_WINDOW;
//rejestruje klase okna
RegisterClassEx (&KlasaOkna);
//tworzenie okna
HWND Okno;
Okno = CreateWindowEx(NULL,
NazwaOkna,
NazwaOkna,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow (Okno,nCmdShow);
if(NULL==(pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
MessageBox(0,"fail_sdk_version","fail0",0);
D3DDISPLAYMODE d3ddm;
if(FAILED(pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
MessageBox(0,"fail1_get_adapter_mode","fail1",0);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = true;
d3dpp.BackBufferFormat = d3ddm.Format;
if(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,Okno,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&pDev)))
MessageBox(0,"fail_create device","fail2",0);
//stworzenie obiektu tupu MSG
MSG msgk;
msgk.message=NULL;
//pętla komunikatów
while (GetMessage(&msgk,NULL,0,0))
{
if(PeekMessage(&msgk,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msgk);
DispatchMessage(&msgk);
}
else
{
pDev->Clear(0,0,D3DCLEAR_TARGET,0xff00ff00,1,0);
pDev->BeginScene();
pDev->EndScene();
pDev->Present(0,0,0,0);
}
}
pDev->Release();
pD3D->Release();
return static_cast<int>(msgk.wParam);
}
Czy to tylko u mnie, czy jednak jest jakiś błąd w kodzie?