2 Probleme



  • Naja der Thread gehört halb ins WinApi Forum 😉
    Sollen die Moderatoren entscheiden, wo er hingehört.

    Zum ersten Problem:
    Ich habe mal die komplette WindowGL.cpp bei pastebin gepostet. Die Position der Kommentare ist zwar ziemlich verhunzt, aber ganz weglassen wollte ich sie jetzt auch nicht.
    http://pastebin.com/mgf41EfB

    Zum zweiten Problem:
    Ich finde die reinterpret_casts auch sehr brutal, aber so hat es funktioniert.
    Ich habe die Methode aus dem NeHe Tutorial, allerdings hätte ich nichts dagegen, das Fenster irgendwie anders zu erstellen, hauptsache es funktioniert. Wenn da jemand ein paar Tipps hätte, wäre ich sehr dankbar.



  • Kommt dein seltsamer Ton beim delete (Aufruf Destructor den du ja nicht definiert hast) oder beim KillWindowGL? Kannst das doch einfach mal durchdebuggen um die genaue Stelle zu finden. Hast du das schonmal gemacht?



  • Das ich den Ton nicht schon vorher gehört habe, lag anscheinend daran, dass ich meine Boxen nie an hatte. Ich habe gerade nochmal nachgeschaut und den Ton erzuegen diese beiden MessageBoxen, die sofort wieder verschwinden:

    if (hDC && !ReleaseDC(hWnd,hDC)) {									// Können wir DC freigeben?
    		MessageBox(NULL, _T("Freigabe des Device Kontext gescheitert."), _T("SHUTDOWN ERROR"), MB_OK | MB_ICONINFORMATION);
    		hDC = NULL;														// Setze DC auf NULL
    	}
    
    	if (hWnd && !DestroyWindow(hWnd)) {									// Können wir das Fenster zerstören?
    		MessageBox(NULL, _T("Zerstören des Fenster-Handle gescheitert."), _T("SHUTDOWN ERROR"), MB_OK | MB_ICONINFORMATION);
    		hWnd = NULL;													// Setze hWnd auf NULL
    	}
    

    Also der Device Kontext und der Fenster Handle können nicht freigegeben werden.
    Und da habe ich direkt noch eine Frage: Wie schaffe ich es, dass die MessageBox solange da bleibt, bis ich OK gedrückt habe?
    Mit if(MessageBox(....) == IDOK) klappt es nicht.



  • So, ich habe jetzt nochmal ein bisschen in der MSDN rumgestöbert, und dann GetLastError() ausprobiert. Das ist anscheinend die einzige Möglichkeit, irgendwas herauszufinden. Aber GetLastError() gibt immer den Wert 3435973836 zurück. Und damit kann man wenig anstellen.
    Falls es noch relevant ist: Der Wert "unused" von hWnd ändert sich immer im Laufe des Programms. Aber Google sagt, der Wert ist irrelevant.



  • Warum gehen die MessageBoxen sofort wieder zu?
    Warum musst du gleich eine MessageBox öffnen?
    Was genau scheitert denn, so dass die If-Bedingungen erfüllt sind.
    Normalerweise müsste das ja klappen. Ist HDC richtig initialisiert wurden bevor du es zerstörst?
    Liegt es an ReleaseDC oder DestroyWindow?
    Hast du vor dem ReleaseDC die Funktionen GetWindowDC oder GetDC aufgerufen?
    Welche Zahl gibt ReleaceDC zurück?
    Wenn du das DC mit CreateDC erzeugt hast darfst du es nicht mit ReleaseDC freigeben, sondern musst DeleteDC verwenden.
    Außerdem muss ReleaseDC im selben Thread aufgerufen werden, in dem auch GetDC aufgerufen wurde. Das selbe gilt für CreateWindow und DestroyWindow.

    Das würde ich jetzt erstmal versuchen rauszufinden.



  • Und debugge das nochmal durch und guck mal wann die Box aufgeht und wieder zu.
    Ich vermute, dass ein anderer Thread dein Hauptfenster zerstört und dadurch die MessageBox keinen Owner mehr hat. Setze entweder mal den ersten Parameter auf hWnd oder versuchs mal mit dem zusätzlichem Style MB_TASKMODAL oder MB_SYSTEMMODAL.



  • Sehen tut man die MessageBox garnicht. Wenn man bis zur Zeiler der MB debuggt, erscheint noch nichts, und wenn man bis zur Zeile danach debuggt hört man nur den Ton. Als ersten Parameter hWnd zu benutzen erscheint mir sinnlos, da ja genau dieser zerstört werden soll. MB_TASKMODAL oder MB_SYSTEMMODAL haben auch keinen Effekt, dass die MB's länger offen bleiben.



  • Kann ein Moderator den Thread mal ins WinApi Forum verschieben?
    Wäre nett 🙂



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • So, ich habe jetzt noch bemerkt, dass wen ich die ganzen Nachrichten normal abarbeite, ohne Funktion, wie ich es eine seite vorher schon gepostet habe, funktioniert alles einwandfrei.
    Allerdings war mein Ziel genau der gegenteil. Und zwar, dass ich mit der Funktion TranslateMsg alle Nachrichten korrekt abarbeiten kann. Auch WM_CREATE. Kann mir da jemand ein paar Tipps geben? 🙂


Anmelden zum Antworten