Möglichkeiten des ToolBar-Designs in MFC Anwendung mit Visual Studio 2005



  • Hallo,

    ich bin gerade dabei die technischen Möglichkeiten der Neugestaltung des
    User Interfaces unserer Anwendung auszuloten. Da gibt es in der Anwendung
    neben Hintergrundfarben Icons zur Status Kennzeichnung und eine ToolBar,
    die aus der Klasse "CToolBar" abgeleitet ist (enthält nur ein paar Overrides).

    Nun ist die Toolbar mein Hauptproblem.
    Habe schon ettliche Beispielprojekte aus "Codeproject" und anderen durchgesehen
    aber einfach noch noch nix richtig kappiert.
    Kann vielleicht jemand auf einfache Weise helfen?

    Während ich mit den normalen bmp-Icons und mit Hintergründen eine 24 Bit
    Farbtiefe darstellen und bearbeiten kann (bei den Bitmap-Icons über Farbpalette),
    komme ich mit der Toolbar nicht über den üblichen Standard hinaus (4 Bit, Standard-Palette).

    Gerne würde ich die Möglichkeit nutzen, hier auch mit einer eigenen Farbpalette
    zu arbeiten. Diese kann ich zwar definieren und speichern und wieder laden
    aber kein Toolbar-Bitmap damit abspeichern. Weder beim neu Erstellen noch beim
    Bearbeiten einer bestehenden Toolbar. Alles bleibt bei der alten Farbpalette.

    Mein nächstes Problem ist die Sache mit den Hot-Buttons, also einer dritten
    Darstellungsart neben aktiv und inaktiv (z.B. für MouseOver).
    Im Netz finde ich dazu immer, dass man hierzu die zugehörigen ImageList-Objekte
    erzeugen muss. Meine Anwendung kann hier nur aktiv u. inaktiv, arbeitet dabei
    aber ohne diese ImageList-Objekte. Ich habe auch nur eine, die farbige Variante
    einer Toolbar als Bitmap. Also müsste doch auch diese Hot-Button Geschichte
    irgendwie so funktionieren. ImageListen finde ich nur zu der älteren Toolbar-Variante,
    dem CToolBarCtrl-Objekt. Dort gibt es eine Methode zum Laden dieser ImageList-Objekte.
    Aber dieses Vorgehen würde dem aktuellen Aufbau widersprechen.

    Weiterhin lese ich auch immer wieder, dass man (mit externem Toolbar-Editor)
    auch mit 24 Bit Farbtiefe arbeiten kann. Diese Variante verlangt dann auch nach
    ImageListen. In diesem Fall wird meine Toolbar einfach schwarz mit ein paar bunten
    Pixeln.

    Ich finde aber nichts, das ich in meiner Anwendung hierzu einstellen könnte.

    Kann mir hier bitte jemand helfen?

    Grüsse
    Helmut



  • Hi,

    bei www.CodeProject.com oder bei www.CodeGuru.com findest Du alle
    möglichen Beispiele, das beste aber ist, wenn Du auf VS2015 wechselst und
    von dort aus für XP entwickelst, das VS2005 ist jetzt Ur alt. Die Mühe das
    Projekt unter VS2015 Kompilierbar zu machen lohnt sich.

    Dann kannst Du auch mit dem Klassenassist. eine Konforme SDI/MDI Anwendung
    herleiten, die mit den seinerzeit verbesserten MFC Klassen eines dritt Anbieters einherkommen.

    Ansonsten findest Du alte Exempels bei den obigen Links zu Hauf.

    Grüße
    Karsten



  • Hallo Karsten,

    vielen Dank für Deine Antwort. Wenigstens Einer, dem was dazu einfällt!

    Die Beispiele habe ich gefunden. Noch habe ich aber nicht alles verstanden.
    Ein Redesign unserer Anwendung lassen wir extern machen.
    Ich bin dabei, zu testen, was ich technisch machen kann und wieviel Aufwand
    das kostet.

    Das Ganze ist eine Anlagensteuerung.
    Da sind fast 50 Toolbars drin.

    Bisher brauchte ich dazu keine Bitmaps für den inaktiven Zustand.
    Aber es scheint so, als ob ich bei anderer Farbtiefe plötzlich diese Imagelisten
    mit den anderen Grafiken (inaktiv, hot, normal) benötige. Das verstehe ich nicht.
    Bzw. verstehe ich nicht, warum ich sie bisher nicht gebraucht habe.
    Das gibt alles viel Aufwand. Um einen externen Toolbar-Editor komme ich da
    eh nicht herum.

    Auch ist mir noch unklar, ob bei 32Bit Farbtiefe der Alpha-Kanal in der Toolbar
    überhaupt unterstützt wird. Anscheinen geht es fast überall, aber nicht in der Toolbar.

    Der Versuch, den Aufwand zu reduzieren, wäre weiterhin 4 Bit Farbtiefe, aber
    mit eigener Farbpalette. So wie es Visual Studio eigentlich anbietet.
    Das scheint aber nicht zu funktionieren! Jedenfalls bekomme ich es nicht hin.
    Auch nicht, wenn ich eine neue Toolbar erstelle. einmal die Datei geschlossen
    und wieder geöffnet, und schon sind die Standardfarben wieder da und die
    bestehende Grafik zerstört. Also alles Müll, was Microsoft da fabriziert hat!

    Da die Anwendung in reduziertem Umfang auch noch auf einem Panel laufen muss,
    für das ich einen Cross-Compiler brauche, ist der Wechsel auf VS2015 noch nicht
    angedacht (Entscheidung kommt von oben). Die grafischen Fähigkeiten sind dort
    sicher auch noch nicht besser geworden, fürchte ich.

    Vielleicht fällt jemand ja noch was dazu ein.
    Also vielen Dank nochmal.

    Grüsse
    Helmut



  • Hallo Helmut,

    also ich rate hier konkret ab, ohne jahrelange Erfahrung eine
    bestehende Anwendung mal ebbend optisch zu verändern.

    Du musst erstmal selber dutzende eigene Anwendungen in dem Bereich
    selber herstellen, einfach da irgendwo eingreifen funktioniert nicht.

    Das Thema ImageList findest Du alles im Netz, es gibt keine Hoffnung
    dies ohne viel Erfahrung zu machen, du haust Dir GDI Leaks rein ,
    und deine Anwendung geht den Bach runter, wenn der Entwickler nicht mehr
    da ist, dann ist das Projekt verloren! Besser ist es Du schreibst alles neu.

    Geht mal erst in den Bastelmodus mach Dir deine eigene Toolbar und wenn Du
    genug Erfahrung hast, kannst Du weiter wirken, dein Externer wird die Sache auch nicht mehr rumreißen.

    Grüße und Erfolg
    Karsten



  • Hallo Karsten,

    vielen Dank für die Info.
    So komme ich mir wenigstens nicht so blöd vor, wenn ich das innerhalb 3 Wochen
    noch nicht ganz kappiert habe.

    Unser Ziel ist es ja auch, den Aufwand so gering wie möglich zu halten.
    Ich hoffe, dass die Designer so gut sind und mit den Standardfarben auskommen.
    Bei Microsoft geht das ja auch.

    Schön wäre es daher gewesen, wenn das mit der Änderung der Farbpalette klappen würde.

    Aber ich werde an der Sache dran bleiben.

    Soeben habe ich ein weiteres Beispiel-Projekt bei CodeProject gefunden, das sehr
    vielversprechend ist: (ist mir bisher nicht aufgefallen)

    http://www.codeproject.com/Articles/4162/Generating-inactive-disabled-images-for-toolbar

    Tja, funktioniert bei mir leider nicht. Ging zwar sehr einfach zu implementieren aber ...
    1. Beim Fenster verschieben flackert es.
    2. Verwendung mehrerer Toolbars geht nicht, werden nicht gewechselt, dann Absturz!

    Vielen Dank, auch für die Warnung

    Grüsse
    Helmut


  • Mod

    Der klassische Toolbar kann das alles nicht. Das schöne ist und war, dass der toolbar sich alle benötigen bitmaps selbst errechnet hat. Also er hat auch Bitmaps erzeugt, die die ausgegrauten Buttons darstellen.

    Seit VS-2010 (MFC-Next) ist das mit den erweiterten Toolbarklassen auch ohne weiteres möglich. Microsoft hat sich hier bei der BCG (einem Fremdhersteller)bedient.
    Dort kann man auch alles brav mit 32bit+ Alphachannel nutzen. Fast genau wie mit dem alten Toolbar. Man muss sich auf jeden Fall mal nicht um alle verschiedenen Zustände kümmern. Kann es aber wenn man will.


Anmelden zum Antworten