Schritt 1: Vollbild-Anwendungen müssen zunächst wieder in den Fenstermodus zurückgeschaltet werden (Zurück zum Windows Desktop).
Schritt 2: Trennung des verwendeten Renderkontexts vom Gerätekontext.
Schritt 3: Löschen des nicht mehr verwendeten Renderkontexts.
Schritt 4: Freigabe des Gerätekontexts.
Schritt 5: Anwendungsfenster zerstören.
Schritt 6: Instanz-Handle der OpenGL-Anwendung löschen
Hier nun der zugehörige Source Code:
void KillOpenGLWindow(void)
{
if(g_FullScreen) // Vollbildanwendung?
{
ChangeDisplaySettings(NULL,0); // Zurück zum Windows-Desktop
ShowCursor(TRUE); // Mauszeiger wieder darstellen
}
// Falls wir einen gültigen Renderkontext haben
if(g_OpenGLRenderContextHandle)
{
// Trennung des Renderkontexts vom Gerätekontext:
if(!wglMakeCurrent(NULL,NULL))
Add_To_Log("wglMakeCurrent(NULL,NULL) Failed!");
else
Add_To_Log("wglMakeCurrent(NULL,NULL) OK!");
// Renderkontext löschen:
if(!wglDeleteContext(g_OpenGLRenderContextHandle))
Add_To_Log("Delete Render Context Failed!");
else
Add_To_Log("Delete Render Context OK!");
g_OpenGLRenderContextHandle = NULL;
}
// Gerätekontext freigeben:
if(g_DeviceContextHandle &&
!ReleaseDC(g_MainWindowHandle, g_DeviceContextHandle))
{
Add_To_Log("Release Device Context Failed!");
g_DeviceContextHandle = NULL;
}
else
Add_To_Log("Release Device Context OK!");
// Anwendungsfenster zerstören:
if(g_MainWindowHandle && !DestroyWindow(g_MainWindowHandle))
{
Add_To_Log("Could Not Release g_MainWindowHandle!");
g_MainWindowHandle = NULL;
}
else
Add_To_Log("Release g_MainWindowHandle OK!");
// Instanz-Handle der Windows-Anwendung löschen:
if(!UnregisterClass(L"OpenGL", g_ApplicationInstanceHandle))
{
Add_To_Log("Could Not Unregister Class!");
g_ApplicationInstanceHandle = NULL;
}
else
Add_To_Log("Unregister Class OK!");
Add_To_Log("KillOpenGLWindow Successfull!");
}
{
if(g_FullScreen) // Vollbildanwendung?
{
ChangeDisplaySettings(NULL,0); // Zurück zum Windows-Desktop
ShowCursor(TRUE); // Mauszeiger wieder darstellen
}
// Falls wir einen gültigen Renderkontext haben
if(g_OpenGLRenderContextHandle)
{
// Trennung des Renderkontexts vom Gerätekontext:
if(!wglMakeCurrent(NULL,NULL))
Add_To_Log("wglMakeCurrent(NULL,NULL) Failed!");
else
Add_To_Log("wglMakeCurrent(NULL,NULL) OK!");
// Renderkontext löschen:
if(!wglDeleteContext(g_OpenGLRenderContextHandle))
Add_To_Log("Delete Render Context Failed!");
else
Add_To_Log("Delete Render Context OK!");
g_OpenGLRenderContextHandle = NULL;
}
// Gerätekontext freigeben:
if(g_DeviceContextHandle &&
!ReleaseDC(g_MainWindowHandle, g_DeviceContextHandle))
{
Add_To_Log("Release Device Context Failed!");
g_DeviceContextHandle = NULL;
}
else
Add_To_Log("Release Device Context OK!");
// Anwendungsfenster zerstören:
if(g_MainWindowHandle && !DestroyWindow(g_MainWindowHandle))
{
Add_To_Log("Could Not Release g_MainWindowHandle!");
g_MainWindowHandle = NULL;
}
else
Add_To_Log("Release g_MainWindowHandle OK!");
// Instanz-Handle der Windows-Anwendung löschen:
if(!UnregisterClass(L"OpenGL", g_ApplicationInstanceHandle))
{
Add_To_Log("Could Not Unregister Class!");
g_ApplicationInstanceHandle = NULL;
}
else
Add_To_Log("Unregister Class OK!");
Add_To_Log("KillOpenGLWindow Successfull!");
}