MessageBox positionieren, aber wie?
-
Hallo,
in einer CDialog gebe ich eine Meldung mit MessageBox(...) aus

Leider positioniert er die Box in die Mitte
Wie kann ich das Ding z.B. in die obere, linke Ecke des Dialoges bekommen,
ohne ein neues Fenster zu bauen
Danke
Slider
-
Bau ein eigenes Fenster.. wird sonst viel zu aufwendig..
Du müsstest über EnumChildWindows das handle der messagebox hohlen, und das geht je net im aufrufenden thread, also brauchst noch nen thread.... viel zu umständlich...
-
Danke, ich dachte auch an etwas, was noch einfacher ist als ein
neues Fenster zu bauen
Irgendwie mit Klassenableitung oder so 
Ich habe da eine nicht ganz feine Lösung gefunden

int CMyDlg::MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption, UINT nType) { int retpar; WINDOWPLACEMENT wp; /* Hole Position von aufrufendem Dialog */ GetWindowPlacement(&wp); /* Setze gleiche Position, aber mit der Größe 1x1 und wichtig: FALSE=nicht neu zeichnen */ MoveWindow( wp.rcNormalPosition.left, wp.rcNormalPosition.top, 1, 1, FALSE); /* Ausgabe zentriert um den linken, oberen Punkt */ retpar = CDialog::MessageBox(lpszText, lpszCaption, nType); /* Alte Größe wieder herstellen und neu zeichnen */ MoveWindow(&wp.rcNormalPosition, TRUE); /* Rückgabewert von MessageBox() übergeben */ return(retpar); }Funktioniert solange, wie keiner über das alte Fenster,
während der MessageBox-Ausgabe malt
Für weiter Anregungen bin ich weiterhin offen.
Gruß
Slider
-
Mit EnumChildWindows wird es nichts, denn die MessageBox hat doch keinen WS_CHILD Style, sondern ist ein Popup-Dialog. Und was du jetzt machst, positioniert doch nicht die MessageBox, du hast ja kein gültiges Handle.
Was du aber machen kannst ist einen WH_CBT Hook zu setzen, kurz bevor die MessageBox gezeigt wird. In der Hook-Prozedur musst du dann auf HCBT_ACTIVATE reagieren, somit bekommst du das Handle zum Fenster der MessageBox.
Hier wird es nochmal genauer erläutert:
http://www.catch22.org.uk/tuts/msgbox.asp
-
@Shlo
Wie Du richtig bemerkt hast, positioniere ich nicht die MessageBox,
sondern das aufrufende Fenster, so das die MessageBox sich dann
an der neuen Position (zentriert) öffnet.Aber Danke für Deine Anregung, sie ist wesentlich eleganter und
sozusagen auch richtiger. Ich habe es sofort ausprobiert und es
klappt einwandfrei.Ist übrigens eine sehr interessante Seite, die Du angegeben hast.
Genau so etwas habe ich gemeint

Gruß Slider