Problem mit ShowWindow() und WS_VISIBLE



  • Hi Leute ich hab ein ziemlich hässliches Problem und bin kurz vorm durchdrehen!

    Also ich bau mir gerade ne Engine und die hat so ne Art Hauptklasse.
    Ich leg eine Instanz der Klasse an und ruf eine Methode zur Initialisierung auf. Und genau in der ist das Problem. Die Hauptaufgabe ist (zumindest im Moment noch) das anlegen eines Fensters.
    Zuerst füllt sie also eine WNDCLASS-Struktur aus und ruft dann CreateWindow() auf. Das Fenster wird auch erstellt, aber sobald ich innerhalb der Engine ShowWindow(Fenster, SW_SHOW) aufrufe oder WS_VISIBLE in den Fensterstil setze, stürzt mir das Programm (das die Engine hochfährt) genau an dieser Stelle ab.
    Wenn ich allerdings weder WS_VISIBLE noch ShowWindow() in der Engine habe und mir nach dem "Hochfahren" der Engine von einer Kapselungsfunktion den Fensterhandle hol und dann damit ShowWindow aufrufe funktioniert es seltsamerweise.
    Also wie gesagt alles ziemlich seltsam!

    Der Code ist leider ziemlich lang, deshalb wärs gut wenn ich drumrum käme ihn hier zu posten....

    Wenn irgendjemand eine Idee hat woran das liegen kann, dann helft mir bitte!

    Danke und mfg Nico



  • Also in ShowWindow ist bestimmt kein Fehler. Wenn was nicht stimmt gibt sie dir einen Fehlercode zurück, bzw. setzt LastError. Durch ShowWindow wird allerdings das Senden von Nachrichten (z.B. WM_SHOWWINDOW, WM_PAINT, WM_ACTIVATE?, WM_SIZE?) verursacht, die wohl von deinem Code verarbeitet werden und dort ist wohl der Fehler versteckt. Ich tippe mal auf (noch) nicht initialisierte Variablen. Ein Debugger würde dir bestimmt gerne helfen die Stelle zu finden.



  • Ja da hab ich auch schon dran gedacht... aber bis auf WM_ACTIVATE reagiert die Engine auf keine Nachricht. Ich werde das nochmal genau durchsehen... irgendwo versteckt sich der Fehler ^^



  • Hab das mal durchgecheckt aber ich raffs nicht.
    Also die WindowProzedur reagiert wie gesagt nur auf WM_ACTIVATE und WM_DESTROY.
    Was ich halt auch nicht verstehe ist, dass wenn ich bei der Initialisierungsmethode der Engine (nach Erstellung des Fensters) ShowWindow aufrufe das Programm abstürzt... aber wenn ich das ShowWindow rauslasse und später dann im eigentlichen Programm über ne Kapselungsmethode den Fensterhandle hole und dann ShowWindow aufrufe, dann klappt alles....

    ICH VERSTEHE NICHT WO DAS PROBLEM LIEGT!!!

    HELP



  • Juhu ich habs gefunden....
    Das Problem war folgendes:

    Ich hab nicht beachtet das ShowWindow(...) auch eine Nachricht vom Typ WM_ACTIVATE mit sich bringt. Bei der Bearbeitung von WM_ACTIVATE holt sich die WindowProzedur den Zeiger der Engine um dort einige Einstellungen vorzunehmen.
    Das ging aber nicht, weil beim Aufruf von ShowWindow(...) der Zeiger zur Engine noch nicht gesetzt (also NULL) war...

    Das ich das nicht früher gefunden habe.... 😉



  • Ocin schrieb:

    Das ich das nicht früher gefunden habe.... 😉

    tja, vor allem weil ich dir das vor einer Woche schon geschrieben hab 🙄


Anmelden zum Antworten