ControlBar wird erst angezeigt, wenn Fenstergröße verändert wird



  • Hallo,

    ich stehe vor einem sehr eigenartigen Problem in meiner MDI Anwendung: Wenn ich ein Childfenster maximiere/wiederherstelle, soll in einem anderen Childfenster eine ControlBar angezeigt/versteckt werden. Komischerweise geschieht dies aber nur, wenn ich nach dem maximieren bzw minimieren in das entsprechende Childfenster wechsle und mit der maus seine größe verändere.
    Wenn ich also z.B. ein Cild-Fenster wiederherstelle (sodass es nicht maximiert ist), bleiben alle anderen Childfenster unverändert. Wenn ich jedoch nun bei jedem Childfenster die größe (manuell) verändere, erscheinen die ControlBars plötzlich.

    RedrawWindow, UpdateWindow, InvalidateRect etc. haben leider keinen Effekt.

    Ich bin für jeden Tipp seeehr dankbar



  • Meine Idee wäre, MoveWindow mit den gleichen Koordinaten aufzurufen. 😃
    (Hoffentlich ist CWnd "doof" genug und reagiert wie bei einem manuellen ändern.)



  • Vielen Dnak für die Antwort. Leider hat MoveWindow auch nichts bewirkt, genauso wie SetWindowPos.
    Ich bin wirklich ratlos...



  • Code wäre hilfreich



  • Durch ganzen MDI/MFC Kram ist das einfach zu viel um es hier zu posten. Vielleicht schaff ich es anders besser zu präzisieren:

    In OnSize vom ChildFrm ermittel ich ob das Fenster maximiert wurde. Daraufhin wird in einem dort global gespeicherten Objekt der CControlBar Klasse ShowWindow mit SW_HIDE aufgerufen.
    Das wars eigentlich schon. Sagt mir welche Funktion euch sonst verdächtig sein könnte und ich poste sie sofort.



  • Auf welche Klasse hast du denn "RedrawWindow, UpdateWindow, InvalidateRect etc." aufgerufen?



  • Auf das Parent Window der CControlbar, welches ich via GetParent() bekam, also nach dem Motto:

    CMyControlBar m_ctrl;
    ...
    m_ctrl.GetParent()->UpdateWindow();



  • Und das ist dann das MDI-Fenster in dem es liegt? Was passiert, wenn du es direkt auf die ControlBar machst?



  • 👍 Das Problem hat sich lösen lassen...ich hab schließltich erfolg gehabt, als ich WM_SIZE an GetParentFrame() geschickt hab. muss man erstmal drauf kommen 🙂 Vielen Dank für jeden Tipp


  • Mod

    Das ist Quark. Diese Nachricht verschickt man nicht.
    Wie wäre es mit dem Aufruf von RecalcLayout gewesen.
    Hast Du den COntrolbar sicherlich auch in OnCreate erzeugt?



  • Hey, RecalcLayout hat tatsächlich auch den erwünschten Effekt. Bei dem burtalen senden von WM_SIZE tauchten manchmal komische Erscheinungen auf, dennoch muss ich sagen, dass es halt funktioniert hat, auch wenn es gegen WINAPI-Ideologie spricht.

    Vielen Dank


  • Mod

    Es funktioniert! Das ist keine Lösung.

    Grundsätzlich sollte man es sich von vorne herein abschminken interne Windows Nachrichten zu versenden!

    Ein Blick in die OnSize Routine des Mainframes hätte Dir sofort eröffnet, dass Du nur die entsprechenden Funktionen, die auch hier verwendet werden direkt aufrufen musst/kannst!


Anmelden zum Antworten