WM_PAINT Message stellt Message Box in den Hintergrund



  • Hallo! Ich habe da, wer hätte es gedacht, ein kleines Problem, dass ich einfach nicht selbst gelöst bekomme. Ich habe ein Programm geschrieben, das eine Messagebox zeigt, wenn man auf einen Info-Button klickt.
    Als ich dann jedoch die WM_PAINT Message hinzufügte, um ein wenig mit Bitmaps zu experimentieren, fiel mir auf, dass wenn ich auf den Info-Button drücke das Hauptfenster den Fokus verliert und man das Geräusch einer erscheinenden Messagebox hört. Allerdings ist diese Messagebox im Hintergrund und man kann sie nur durch das drücken der ALT-Taste wieder sichtbar machen. Durch einfaches Herumklicken lässt sich nichts machen. Ich habe mich ein wenig durch Google gearbeitet und siehe da... . Auch einige andere haben das selbe Problem mit WM_PAINT wie ich. Nur habe ich bis jetzt noch keine Lösung dafür gefunden.

    Ich hoffe ihr könnt mir helfen dies unter Kontrolle zu kriegen.
    Vielen Dank schonmal im Voraus. 😃



  • Vermutlich hast Du zwei Probleme: Zum Einen hast Du in Deiner WndProc in einem case-Zweig ein "break" oder "return" vergessen. Zum Anderen hast Du der MessageBox kein Parent-Window angegeben (der erste Parameter).



  • Gästchen schrieb:

    Vermutlich hast Du zwei Probleme: Zum Einen hast Du in Deiner WndProc in einem case-Zweig ein "break" oder "return" vergessen. Zum Anderen hast Du der MessageBox kein Parent-Window angegeben (der erste Parameter).

    Also returns und breaks sind überall vorhanden. Der Messagebox habe ich zur Sicherheit auch mal ein Parent-Window übergeben, doch das Problem bleibt.



  • Hallo,
    Deine Meldung ist sehr interesant. Hate ich auch auf Parent getippt. Scheint aber was anderes zu sein. kanns Du bitte den Source Zeigen?
    Danke.



  • Dass du die MessageBox überhaupt zu sehen bekommst, ist wohl eher Glück. Meine Vermutung ist, dass du MessageBox() ausserhalb des BeginPaint()-EndPaint()-bereiches aufrufst oder diese ganz vergessen hast.



  • Oh, ich wusste garnicht, dass man das innerhalb von WM_PAINT aufrufen muss. 😃 Aber wenn das so ist, dann ist jetzt wohl das Problem gelöst.

    LG Honky



  • [Rewind] schrieb:

    Dass du die MessageBox überhaupt zu sehen bekommst, ist wohl eher Glück. Meine Vermutung ist, dass du MessageBox() ausserhalb des BeginPaint()-EndPaint()-bereiches aufrufst oder diese ganz vergessen hast.

    Seit wann muss man Messagebox im WM_PAINT aufrufen und wie soll das gehen, wenn man auf einen Menüitem klickt? Ich gehe mal davon aus, dass er BeginPaint und EndPaint vergessen hat und für die Messagebox kein Parentfenster angegeben hat oder das falsche.



  • Die MassageBox gehört zu den einfachsten Win-Api-Funktionen überhaupt. Man ruft sie von irgendwo auf mit MessageBox(NULL, ...., MB_xxxx) und fertig. Den Rest macht Windows von allein. Bitte mitteilen, wie und wo die MessageBox aufgerufen wird. Darüber habe ich noch nie lange nachgedacht! 🤡



  • Du solltest aber mal über den ersten Parameter nachdenken? 😉



  • Guter Hinweis: Der 1. Parameter legt fest, welches Fenster bis zum Verlassen der MessageBox lahmgelegt wird. 😉
    NULL --> das aufrufende Fenster (>99% aller Fälle) = Standard
    HWND --> irgendein Fenster (< 1% aller Fälle)

    Wer kein Fenster lahmgelegt haben will, findet dafür auf meiner Homeoage http://berniebutt.npage.de ein Beispiel mit einer moduslosen MessageBox. Über deren Wert lässt sich aber streiten. Sowas gehört gewöhnlich in die Rubrik 'Besser nicht!'.

    Ich verstehe aber immer noch nicht den angegebenen Konflikt mit WM_PAINT. 😕 Bitte Source zeigen! 🤡

    Noch ein Hinweis: WM_PAINT kann sehr oft aufgerufen werden. Da gehören unnötige Dinge nicht hin!



  • berniebutt schrieb:

    NULL --> das aufrufende Fenster (>99% aller Fälle) = Standard

    Nicht ganz.
    NULL --> es gibt kein Parent-Fenster und es wird auch keins lahmgelegt.

    berniebutt schrieb:

    Über deren Wert lässt sich aber streiten. Sowas gehört gewöhnlich in die Rubrik 'Besser nicht!'.

    hast noch gerettet. Sie sind gerade dafür gedacht, ein Fenster "lahmzulegen". Für andere Fälle gibt es Funktionen zum Erstellen von modeless windows.


Anmelden zum Antworten