Ein Button in der Statuszeile - aber bitte in schön...



  • Hallo Leute,

    in meiner Toolbar werden einige Optionen angeboten (es handelt sich um die Standardtoolbar, mit CreateWindow() und der Fensterklasse TOOLBARCLASSNAME erzeugt. Der betroffene Schalter ist mit den Styles BTNS_DROPDOWN|BTNS_WHOLEDROPDOWN versehen). Die ausgewählte Option wird auch in der Statuszeile (STATUSCLASSNAME) mit Text und Icon angezeigt. Das klappt alles wunderbar.

    Die Idee ist jetzt, diese Auswahlmöglichkeit auch in der Statuszeile anzubieten. Ein paar Ideen habe ich, die mir aber noch nicht so gut gefallen:

    • Mit ein wenig Subclassing kann ich in den Part rechts das kleine schwarze Dreieck zeichnen, das eine Dropdown-Option symbolisiert und auf Mausklick auch das Menü erscheinen lassen. Das klappt - aber was mir hier fehlt, ist die optische Rückmeldung beim Mausklick und der Hover-Effekt, wenn die Maus über dem "Schalter" schwebt.
    • Auf die gleiche Art ließe sich ein Button (gerne auch mit Style BS_SPLITBUTTON) dort hinein verpflanzen. Auch das klappt - aber mit seinem ewig sichtbaren fetten Rahmen sieht der dort unten aus wie ein Fremdkörper.

    Mein Ziel wäre, dass die Statuszeile so reagiert wie die Toolbar oben. Oder so wie die Statuszeile im MS-Word reagiert (lt. Winspector ist das aber wohl was Officemäßig handgebautes...) Bin für Ideen dankbar, was ich tun könnte.


  • Mod

    Hover Effekt etc. lässt sich mit dem Abfangen von WM_MOUSEMOVE/LEAVE und DrawFrameControl auch hinbekommen.

    Wenn Du es etwas stylischer haben willst kannst Du auch die Theme-API verwenden.
    Anleitung gibt es hier:
    http://www.codeproject.com/Articles/3269/Native-Win-Theme-aware-Owner-draw-Controls-witho



  • Hmm... Owndraw ist mir eigentlich zu viel Aufwand für so eine Kleinigkeit. Aber DrawFrameControl sieht nett aus. Ich werd's mal ausprobieren.

    Schon mal vielen Dank! 🙂


  • Mod

    Das Ownerdraw Sample zeigt doch nur die Anwednung von der Theme-API.
    Und so oder so bleibt es Ownerdraw... Ansonten erzeuge einfach einen Child Button im Status-Control.


Anmelden zum Antworten