Deine IF-Anweisung sieht eh etwas komisch aus. Vor allem wundert es mich das es keinen Fehler gibt. Du machst 2 Klammern auf und schließt drei ??? Und wieso ist die Anweisung so komisch gestalltet? Warum diese doppelte IF-Anweisung?
Ein Ausdruck ist entweder Wahr oder Unwahr. Ist er NULL ist er Unwahr ist er ungleich NULL ist er Wahr. Dein Ausdruck ist "GetAsyncKeyState(VK_F12) & 0x8000".
Deine Klammern sehen alle etwas komisch aus ;D Vieleicht liegt es daran das du nicht alles gepostet hast. Nur ist es etwas Iretierend. Ich versuch deinen Code mal auseinander zu nehemen.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
if(GetAsyncKeyState(VK_F12)&0x8000)?1:0)
{ // Ausführungsblock der IF-Anweisung (Begin)
Pause = true;
{ // Warum diese Klammer? Oder soll sie obige Klammer schließen?
if(lpDDSBack)
{
lpDDSBack->Release();
lpDDSBack = NULL;
}
if(lpD3DDevice)
{
lpTextur->Release();
lpTextur = NULL;
lpD3DDevice->Release();
lpD3DDevice = NULL;
lpD3D->Release();
lpD3D = NULL;
}
} // Warum diese Klammer?
} // Ausführungsblock der IF-Anweisung (Ende)
|
So wie ich das sehe ist das kein Wunder das sich deine Anwendung Beendet. Denn sobald du F12 drückst heißt das für deinen Code das dein Ausdruck wahr ist und damit alle DX Schnittstellen freigegeben werden. Damit hast du deine Anwendung Praktisch geschlossen und nicht wie du es wohl wolltest nur pausieren lassen.
Wenn deine Anwendung bei F12 nur eine Pause einlegen soll, darfst du nicht die DX Komponenten freigeben.
Tipp:
Du solltest deine Variable "Pause" vorab Initialisieren (false) und dann bei deiner Abfrage dies schreiben.
|
Quellcode
|
1
|
Pause = !Pause;
|
Damit switched du Automatisch immer hin und her
Tipp2:
Für das freigeben schreib dir ein schönes Makro
|
Quellcode
|
1
2
3
4
5
6
7
8
|
template<class T> void SafeRelease(T*& pInterface)
{
if(pInterface)
{
pInterface->Release();
pInterface = 0;
}
}
|
Damit sieht dein Code etwas sauberer aus
[/code]