|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
da-harry Mini JLI'ler
Anmeldedatum: 22.11.2003 Beiträge: 30 Wohnort: München Medaillen: Keine
|
Verfasst am: 22.11.2003, 23:52 Titel: Kapitel 19 (Fenster schließt sich gleich nach dem öffnen) |
|
|
Hallo,
ich wollte bloß fragen, ob ich hier (Kapitel 19 "Der erste Einsatz von DirectX Graphics") etwas falsch gemacht habe , da wenn ich mein programm kompiliert habe es nur kurz erscheint und sich dann wieder schließt
Code: |
#include <d3d9.h>
#include <d3dx9.h>
//Anwendungsfenster erzeugen:
HWND CreateMainWindow(HINSTANCE hInstance);
//Callbackfunktionen zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg,
WPARAM wParam,
LPARAM lParam);
//globale Variable für das Fenster-Handle:
HWND hWnd = 0;
LPDIRECT3D9 lpD3D = NULL;
LPDIRECT3DDEVICE9 lpD3DDevice = NULL;
//Direct3D initialisieren
BOOL InitDirect3D(HWND hWnd);
// Direct3D-Objekte wieder freigeben
void CleanUpDirect3D(void);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
hWnd = CreateMainWindow(hInstance);
//Fehler? (=0)
if(0 == hWnd)
{
MessageBox(0, "Fenster konnte nicht erzeugt werden!!!", "FEHLER IN DER ANWENDUNG", MB_OK);
return 0;
}
if(!InitDirect3D(hWnd))
{
MessageBox(0, "Initialisierung von DirectX fehlgeschlagen", "FEHLER IN DER ANWENDUNG", MB_OK);
return -1;
}
//Nachrichtenstruktur
MSG msg;
//Wiederholen bis WM_Quit
while(GetMessage(&msg,NULL,0,0))
{
//Nachrichten an die Callback-Funktion schicken
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass = {
sizeof(WNDCLASSEX),
CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW,
MessageHandler,
0,
0,
hInstance,
LoadIcon(NULL, IDI_WINLOGO),
LoadCursor(NULL, IDC_ARROW),
(HBRUSH)GetStockObject(WHITE_BRUSH),
NULL,
"WindowClass",
LoadIcon(NULL, IDI_WINLOGO)
};
RegisterClassEx(&wndClass);
return CreateWindowEx(
NULL,
"WindowClass",
"DirectXGraphics",
WS_VISIBLE | WS_OVERLAPPEDWINDOW,
200, 100,
800,
600,
NULL,
NULL,
hInstance,
NULL);
}
LRESULT CALLBACK MessageHandler(HWND hWnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
CleanUpDirect3D();
PostQuitMessage(0);
return 0;
break;
case WM_PAINT:
break;
}
return (DefWindowProc(hWnd, msg, wParam, lParam));
}
BOOL InitDirect3D(HWND hWnd)
{
lpD3D = Direct3DCreate9(D3D_SDK_VERSION);
if(NULL == lpD3D)
{
MessageBox(0, "Initialisierung von DirectX fehlgeschlagen_1", "FEHLER IN DER ANWENDUNG", MB_OK);
return FALSE;
}
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams,sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = TRUE;
PParams.BackBufferWidth = 800;
PParams.BackBufferHeight = 600;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8;
if(FAILED(lpD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&PParams,
&lpD3DDevice)))
{
//MessageBox(0, "Initialisierung von DirectX fehlgeschlagen_2", "FEHLER IN DER ANWENDUNG", MB_OK);
return FALSE;
}
return TRUE;
}
// Direct3D Objekte freigeben
void CleanUpDirect3D(void)
{
// testen, ob die Objekt angelegt
// wurden und ggf. freigeben
if(NULL != lpD3DDevice)
{
lpD3DDevice->Release();
lpD3DDevice = NULL;
}
if(NULL != lpD3D)
{
lpD3D->Release();
lpD3D = NULL;
}
}
|
Ich habe schon 2 MessageBoxen eingebaut um den Ort des Fehlers zu lokalisieren.
Dabei ist herausgekommen, dass er hier irgendwo sein müsste:
Code: |
...
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams,sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = TRUE;
PParams.BackBufferWidth = 800;
PParams.BackBufferHeight = 600;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8;
if(FAILED(lpD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&PParams,
&lpD3DDevice)))
{
//MessageBox(0, "Initialisierung von DirectX fehlgeschlagen_2", "FEHLER IN DER ANWENDUNG", MB_OK);
return FALSE;
}
...
|
kann mir irgendjemand helfen |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 23.11.2003, 07:34 Titel: Re: Kapitel 19 (Fenster schließt sich gleich nach dem öffnen |
|
|
da-harry hat Folgendes geschrieben: | Code: | ...
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams,sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = true; [b]<-- das hier ist eine bool und keine BOOL Variable.[/b]
PParams.BackBufferWidth = 800;
PParams.BackBufferHeight = 600;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8;
if(FAILED(lpD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&PParams,
&lpD3DDevice)))
{
//MessageBox(0, "Initialisierung von DirectX fehlgeschlagen_2", "FEHLER IN DER ANWENDUNG", MB_OK);
return FALSE;
}
...
|
|
|
|
Nach oben |
|
|
da-harry Mini JLI'ler
Anmeldedatum: 22.11.2003 Beiträge: 30 Wohnort: München Medaillen: Keine
|
Verfasst am: 24.11.2003, 12:43 Titel: Danke |
|
|
Danke ,
bin noob, hab gerade erst zum programmieren angefangen! |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 20.04.2004, 18:35 Titel: Hi |
|
|
Hi ne frage haste dir denn Text ausem Buch abgeschrieben oder aus der Cd mit denn Beispielen |
|
Nach oben |
|
|
Kronos Senior JLI'ler
Anmeldedatum: 19.03.2004 Beiträge: 290
Medaillen: Keine
|
Verfasst am: 20.04.2004, 18:56 Titel: |
|
|
Detektiv City Hunter! Is gut nun, Hunter, wir kennen alle dein Problem |
|
Nach oben |
|
|
City Hunter Super JLI'ler
Alter: 39 Anmeldedatum: 18.04.2004 Beiträge: 330 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 20.04.2004, 19:03 Titel: |
|
|
Kronos hat Folgendes geschrieben: | Detektiv City Hunter! Is gut nun, Hunter, wir kennen alle dein Problem |
Ne ich habe das Problem wenn ich die Codes ausem Buch nehme kommen bei mir 27 Fehler und wenn ich mir die Beispiel cd anschaue sind da code drin die ich im Buch nicht finede |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|