Toolbar aktualisieren manuell auslösen



  • Moin!

    Ich habe eine SDI mit zwei Toolbars, die per WM_UPDATE_UI aktuell gehalten werden.
    Nun habe ich das Phänomen festgestellt, dass das Aktualisieren zwar klappt, wenn ich mit der Maus auf Speichern klicke - aber nicht, wenn ich es per Tastatur auslöse. 😕
    Dann muss ich erst nochmal irgendwo klicken, damit die Toolbars aktualisiert werden.

    Ich habe es schon mit

    AfxGetMainWnd()->Invalidate();
    

    und

    m_wndToolBar.Invalidate();
    m_wndToolBar2.Invalidate();
    

    versucht. Beides hat keinen Effekt. 😞

    Was muss ich da aufrufen?


  • Mod

    Toolbars werden in der Idfle Phase aktualisiert. Also im Allgemeinen nach dem die letzte Windows Nachricht gezogen wurde. Wenn man ein Idle-Update erzwingen will genügt es IMHO einfach eine WM_NULL Nachricht zu posten (wichtig nicht senden) oder irgendwo einen aktiven Timer zu haben.



  • Also, ich habe jetzt mal im Speichern-Handler im Mainframe das hier ans Ende gepackt:

    PostMessage(WM_NULL);
    

    Hilft nicht. 😞

    PS: Ein Timer hilft auch nicht.
    Es hilft aber, das Fenster kurz in den Hintergrund zu schicken und dann wieder hervor zu holen, dann ist alles prima. 😕



  • Weitere Tests mit ShowWindow, UpdateWindow und diversen Messages haben nichts geholfen.

    Die Titelzeile hat übrigens auch ein Aktualisierungsproblem, aber das hatte ich bisher für unkritisch befunden. 🙄


  • Mod

    Aber dann hast Du ein anderes Problem. Wenn Invalidate nicht hilft und auch der Aufruf der ON_UPDATE Handler dann stimmt irgendwas ncht in Deiner Windows Hirarchie.

    Ein PostMessage WM_NULL oder ein Timer an das Mainframe erzwingt den Aufruf aller ON_UPDATE Handler!
    Ein Invalidate muss ein Neuzeichnen erzwingen, allerings wird hier kein ON_UPDATE Handler aufgerufen!



  • Oh, die Antwort hatte ich neulich nicht mehr gesehen. 😞
    Aber, wie kann ich denn suchen, WAS da nicht stimmt?

    Ich habe das Problem nämlich immer noch und es ist extrem störend. 😞

    PS: Vielleicht liegt da ja auch das Tastenfresserproblem unter Win98. 🙄



  • Ah, ich hab es: Mein Workaround zum Tastenfresser war schuld. 🙄
    Jetzt geht immerhin das aktualisieren wieder, leider müssen die Win98 User (ca.90%) weiterhin auf die Tastaturbedienung verzichten. 😞



  • hast du mal zusätzlich zu dem Invalidate() auch UpdateWindow aufgerufen?



  • Ich glaube, auch das hätte nicht geholfen, da ich in CMainFrame::PreTranslateMessage vergessen hatte, die Basisklasse aufzurufen. 🙄


Anmelden zum Antworten