Witam, mam następującą zagwozdkę. Tworzę okienko, coś tam sobie rysuje i takie tam bzdety. Tym niemniej kiedy chcę zamknąć to okno, program nie wstawia do kolejki komunikatów WM_QUIT. Zatem okno znika, ale proces nadal leci. Stąd prośba o pomoc z Waszej strony, jak zamknąć to cholerstwo? :D Poniżej fragmenty kodu z procedury okna oraz pętli wiadomości:
//procedura okienkowa
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HGLRC hRC; //kontekst tworzenia grafiki
static HDC hDC; //kontekst urządzenia
int width, height; //szerokość i wysokość okno
switch(message)
{
case WM_CREATE: //okno jest tworzone
hDC = GetDC(hwnd); //pobiera kontekst urządzenia
g_HDC = hDC;
SetupPixelFormat(hDC); //wywołuje funkcję określającą format pikseli
//tworzy kontekst tworzenia grafiki i czyni go bieżącym
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
return 0;
case WM_CLOSE: //okno jest zamykane
if(IDYES == MessageBox(hwnd, "Czy na pewno zamknąć okno?", "?",
MB_YESNO | MB_ICONQUESTION))
{
//dezaktywuje bieżacy kontekst i usuwa go
wglMakeCurrent(hDC, NULL);
wglDeleteContext(hRC);
return DefWindowProc(hwnd, message, wParam, lParam);
}
else
return 0;
case WM_DESTROY:
MessageBox(hwnd, "Koniec działania programu", "info", MB_OK);
PostQuitMessage(0);
return 0;
//tutaj więcej przetwarzanych komunikatów....
/********************************************************/
//pętla przetwarzania komunikatów
while(!done)
{
PeekMessage(&msg, hwnd, NULL, NULL, PM_REMOVE);
if(msg.message == WM_QUIT) //jeśli otrzymanu komunikat WM_QUIT
{
done = true;
break; //jeśli tak, to aplikacja kończy działanie
}
else
{
//tworzy grafikę
//zeruje bufor ekranu i bufor głębi
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Bam bam....