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

11

19.05.2009, 22:26

Vielleicht solltest du die WinProc (MessageHandler) hinsichtlich WM_SIZE etwas erweitern?

WS_POPUP hat auch keine Min/-Max-Schaltflächen, oder?
fka tm

12

19.05.2009, 22:30

naja, im fullscreen modus sehe ich ünerhaupt nichts von dem fenster. WS_OVERLAPPEDWINDOW funktioniert aber auch nicht.
Eigentlich kann das nicht sein, früher hatte ich anwendungen, die konnte man minimieren ohne WM_SIZE zu verändern.

13

19.05.2009, 22:41

Für Fullscreen ist WS_POPUP sicher Ok.
Würde trotzdem die MessageHandler-Funktion überdenken.
Aktuell werden alle Nachrichten von Windows abgearbeitet.
fka tm

14

20.05.2009, 15:41

hab den fehler gefunden, ich muss diese zeilen in meiner spielschleife ergänzen:

C-/C++-Quelltext

1
2
3
4
5
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }


ist auch irgendwie logisch oder? :lol:

schön doof von mir

15

20.05.2009, 16:00

Jo, diese paar Zeilen Code machen schon Sinn. ;)
fka tm

16

23.05.2009, 10:55

So, jetzt hab ich ein neues Problem.

Wenn ich die Anwendung minimiert habe, gebe ich in MessageBoxes aus, wie der aktuelle Zustand des Devices ist. Solange eine MessageBox angezeigt wird, kann ich das eigentliche Fenster maximieren. Wenn ich die MessageBoxes aber auskommentiere bekommt das Fenster zwar den Fokus, maximiert sich aber nicht.

Mein Code sieht so aus:

C-/C++-Quelltext

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
void CDirect3D::EndScene()
{
    HRESULT DeviceState;
    lpD3DDevice->EndScene();
    DeviceState = lpD3DDevice->Present(0, 0, 0, 0);

    if(DeviceState == D3D_OK) return;
    else if(DeviceState == D3DERR_DEVICELOST)
    {
        MessageBox(0, "Device lost", "Error", MB_OK);
                
        while(true)
        {
            Sleep(10);
            DeviceState = lpD3DDevice->TestCooperativeLevel();
            

            if(DeviceState == D3DERR_DEVICELOST) continue;
            else if(DeviceState == D3DERR_DEVICENOTRESET)
            {
                MessageBox(0, "Device not reset", "Error", MB_OK);
                lpD3DDevice->Reset(&PParams);
                break;
            }
        }
    }
}

17

23.05.2009, 11:39

Also erst wird minimiert, dann zeigst du die MessageBox an?

Geht ohne MessageBox noch was mit der rechten Maustaste?

Ich bevorzuge Debugging oder Log-Files,
und folgenden groben Ablauf:

GameLoop

DeviceLost ? -> MachWas

Eingaben holen - entsprechend reagieren (z.B. Hauptmenü anzeigen)

UpdateStuff (Timer etc.)

Move 'N Render

/GameLoop


Dieses splitten von Clear/BeginScene und Present/EndScene mag ich nicht. :?
Aber naja, Geschmacksache.
fka tm

18

23.05.2009, 11:45

Ich zeige die MessageBox an, wenn das Device verloren ist, das heist die Anwendung minimiert wurde. Wie meinst du das mit der rechten Maustaste? Ich kann mir Desktopeinstellungen angucken^^

Meine Gameloop sieht so aus:

Gameloop

Eingaben holen
Move n Render
Device lost?

/Gameloop

19

23.05.2009, 11:50

Rechte Maustaste auf Icon in der Taskleiste.

Deine Reihenfolge:
Also ich würde nicht Rendern, wenn kein Device mehr da ist... ;)
fka tm

20

23.05.2009, 11:53

mit der rechten maustaste kann ich draufklicken, kann dann aber nur auf schließen klicken sonst nichts.
Ist natürlich nicht so schlau, werde ich demnächst mal ändern.

Werbeanzeige