Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.10.2003, 18:53

Window erstellen funktioniert nicht

Hi!

ich habe folgenden(selbstgeschriebenen Code)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
MSG message;
    bool bInMessageLoop = true;
    int iStartTime;

    g_hInstance = hInstance;

    WNDCLASS WindowClass;
    ZeroMemory (&WindowClass, sizeof(WNDCLASS));

    WindowClass.hInstance = hInstance;
    WindowClass.lpfnWndProc = WindowProc;
    WindowClass.lpszClassName = "D3D9";
    WindowClass.style = CS_HREDRAW | CS_VREDRAW;
    WindowClass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
    WindowClass.hCursor = LoadCursor (hInstance, IDC_ARROW);
    WindowClass.lpszMenuName = NULL;
    WindowClass.cbClsExtra = NULL;
    WindowClass.cbWndExtra = NULL;


    if(!RegisterClass(&WindowClass))
    {
        MessageBox(NULL,"Fehler beim regestrieren der Fensterklasse","Fehler", MB_OK);
        return 0;
    }
    g_hWindow = CreateWindow( "D3D9", "D3D Tutorial 01: CreateDevice", 
                              WS_POPUPWINDOW | WS_VISIBLE | WS_MAXIMIZE  , 100, 100, 300, 300,
                              GetDesktopWindow(), NULL, hInstance, NULL );
    if(g_hWindow == NULL)
    {
        MessageBox(NULL,"Fehler beim erstellen des Fensters","Fehler", MB_OK);
        return 0;
    }


jedoch bricht das Programm ab, mit der Fehlermeldung, dass das Fenster nicht erstellt werden konnte

kann mir jemand helfen?
Do, ut des!
Ceterum censeo, carthaginem delendam esse

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

24.10.2003, 19:37

Wie sieht die WindowProc-Funktion aus?

3

24.10.2003, 19:42

Quellcode

1
2
3
4
5
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    //Maybe later....
    return 0;
}
Do, ut des!
Ceterum censeo, carthaginem delendam esse

4

24.10.2003, 19:46

ok
WindowProc angepasst
jetzt funktionierts
Do, ut des!
Ceterum censeo, carthaginem delendam esse

5

24.10.2003, 19:50

ok
noch eine Frage
meine Hauptschleife sieht so aus

Quellcode

1
2
3
4
5
6
7
8
9
10
    case GS_INGAME:
                {
                    iStartTime = GetTickCount();
                    g_pDirect9Device->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,255,255), 1.0f, 0 );
                    if(KEYDOWN(VK_ESCAPE))
                    {
                        break;
                    }
                    while((GetTickCount() - iStartTime) < 40);
                }


das Clear wird jeodch nicht ausgeführt
das Keydown sehr wohl
der Bildschirm bleibt schwarz
warum wird das Clear nicht ausgeführt??
Do, ut des!
Ceterum censeo, carthaginem delendam esse

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

24.10.2003, 19:54

Zitat von »"Hauptman"«

der Bildschirm bleibt schwarz

Kein Wunder, wenn Du IDirect3DDevice9::Present nicht aufrufst.

7

24.10.2003, 19:58

ok
der Fehler liegt ganz wo anders
nähmlich schlägt die erstellung von Dx9 schon fehl ;)

hier mal meine InitD3D

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
D3DPRESENT_PARAMETERS pParams;

    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    
    ZeroMemory(&pParams,sizeof(D3DPRESENT_PARAMETERS));
    pParams.BackBufferCount = 1;
    pParams.Windowed = false;
    pParams.BackBufferHeight = 800;
    pParams.BackBufferWidth = 600;
    pParams.BackBufferFormat = D3DFMT_X8R8G8B8;
    pParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
    pParams.hDeviceWindow = NULL;
    pParams.EnableAutoDepthStencil = true;
    pParams.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
    pParams.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    pParams.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
    
    HRESULT result = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,
                g_hWindow,D3DCREATE_HARDWARE_VERTEXPROCESSING,&pParams,&g_pDirect9Device);
    if(result != D3D_OK)
    {
        ExitD3D();
        MessageBox(NULL,"Fehler beim erstellen von DirectX 9","Fehler", MB_OK);
        return 1;
    }
    return 0;


aber trotzdem danke das du dich schonmal bemühst, mir zu helfen
Do, ut des!
Ceterum censeo, carthaginem delendam esse

8

24.10.2003, 21:51

Nein David hat schon recht, selbst wenn die Init richtig wäre fehlt die Present ....

9

25.10.2003, 09:12

ok
ich habe jetzt mal das Present eingefügt

Quellcode

1
2
3
4
5
....

                    g_pDirect9Device->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,255,255), 1.0f, 0 );
                    g_pDirect9Device->Present(NULL,NULL,NULL,NULL);
......


er zeigt trozdem nichts an, und meine MessageBox kommt, das Dx9 nicht richtig inistalisiert wurde
Do, ut des!
Ceterum censeo, carthaginem delendam esse

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

25.10.2003, 10:04

Zitat von »"Hauptman"«

er zeigt trozdem nichts an, und meine MessageBox kommt, das Dx9 nicht richtig inistalisiert wurde

Jo, das war ja auch nicht anders zu erwarten. Wenn der Motor beim Auto kaputt ist und Du reparierst die Hupe, kannst Du auch nicht fahren.
Der Fehler ist, dass Du "BackBufferHeight" und "BackBufferWidth" vertauscht hast. So wie es jetzt ist, versuchst Du, eine Auflösung von 600x800 hinzukriegen, und sowas gibt es nicht.
Außerdem solltest Du "hDeviceWindow" besser auf den Handle Deines neu erstellten Fensters setzen, nur zur Sicherheit.

Werbeanzeige