MFC embedded dialog



  • Hallo zusammen,

    ich habe ein kleines Problem mit eingebetteten Dialogen.
    Problemstellung ist wie folgt:
    Ich habe ein Dialog in das ich beliebig viele Dialoge einbetten kann.
    Diese Dialoge soll man resizen und verschieben können.
    Also so etwas ähnliches wie eine MDI Anwendung, bloß eben in einem Dialog.
    Fragt bitte nicht warum, unsere Anwendungs Architektur ist leider Dialog basiert. 🙄

    Jetzt habe ich ein repaint Problem:

    Wenn ich z.B. Fenster A über Fenster B verschieben und danach Fenster B verschiebe,
    dann behält der Teil, der zuvor von Fenster A überdeckt war den Fernster Inhalt von Fenster A.

    Ähnlich sieht das auch mit den Buttons in diesen Dialogen. Wenn die highlited sind, dann sind die immer im Vordergrund. Auch wenn ich A über B schiebe sehe ich den Knopf von B.

    Hat da jemand eine Idee?
    Habe schon versucht die Z-Order zu verstellen. Hat nichts geholfen.
    Habe versucht diese dialoge zu focusieren wenn ich sie anklicke. Hat nichts geholfen da der focus aus irgend einem grund sofort wieder gekillt wird.

    Vielen Dank schonmal im voraus.


  • Mod

    WS_CLIPCHILDREN gesetzt im Parent von A und B?
    WS_CLIPSIBLINGS gesetzt in A oder B?



  • Super, danke dir für die schnelle Antwort.
    Da ich mitlerweile nur noch Kinder in einem Dialog verwalte hat WS_CLIPSIBLINGS ausgereicht.
    Anschließend muss man nur noch das Problem lösen, dass man die Dialoge beim anklicken und ziehen über die title bar in den Vordergrund bringen muss. Also SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    in OnLButtonDown und OnMove.

    Mir gefällt es zwar auch nicht, dass diese Funktion immer in OnMove aufgerufen wird, aber man kann anscheinend keinen left mouse click von der title bar bekommen. 🙄



  • Ein Problem gibt es da noch.
    Wenn ich z.B. eine edit box in diesem embedded dialog plaziere, dann kann ich diesem nicht den focus geben. Sprich: ich kann dort nicht hineintippen.

    Das Control scheint zwar den left mouse button klick zu bekommen, focusiert aber nicht. Habe einen event handler für focus/focus kill im edit control eingehängt.
    Ergebnis: wird nicht aufgerufen.
    Wenn ich den dialog als popup anzeigen lasse, dann werden diese event schon erzeugt.
    Hat da jemand eine idee?



  • Update:
    Mittels "Tab" kann ich in die edit box focusieren und auch hinein tippen.
    Bloß über Maus nicht.


  • Mod

    Dann liegt evtl. ein anderes Fenster davor.



  • Ist eigentlich ausgeschlossen, da ich es mit SetWindowPos als Top setze.
    Wenn ich zusätzlich das attribut DS_CONTROL setze funktioiniert das ganze einwandfrei. Ich benötige jedoch die Title bar.



  • Ich habe jetzt mal ein subclassing von CEdit gemacht.
    Also ein LButtonDown bekomme ich (in MyCEdit).
    Aber leider kein Focus event.

    Wenn ich in der LButtonDown ein SetFocus aufrufe, dann hat die edit box den focus.
    Ich kann auch Text eintippen, aber z.B. den geschriebenen Text nicht markieren.

    Irgendwie habe ich das gefühl, es gibt generell Probleme wenn ich ein Dialog in einen anderen als child einbette, aber den style DS_CONTROL nicht setze.

    Vielleicht hat ja jemand noch eine Idee. Ich bin ziemlich ratlos.


Anmelden zum Antworten