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
-
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.