Dynamische Commands
-
Hallo da!
Ich möchte in mein Programm Kommandos einbauen, welche erst zur Laufzeit "generiert" (dazugeladen) werden. Wie ich diese am besten zum Zielort bekomme, habe ich unter http://support.microsoft.com/?scid=kb%3Ben-us%3B97693&x=7&y=7 bereits herausgefunden. Allerdings würde ich mit diesen Kommandos auch gerne Kontextmenüs und Toolbars bevölkern und hätte dafür gerne Bilder, Tooltips und Status-Bar-Meldungen, wie jedes eingebaute Kommando auch. Nun meine Frage: wie füge ich zur Laufzeit am besten neue Kommandos hinzu, die sich nahtlos in das Programm einfügen? Das ganze soll möglichst gut in den MFC inklusive Feature-Pack funktionieren.
Ich bin bereits über den CCommandManager gestolpert, dort könnte ich wohl entsprechend die Bilder hinzufügen, allerdings fand ich noch nichts bezüglich der Tooltips und weiß auch nicht, inwieweit sich das in die normalen Kommandos integriert.Für Tipps&Ratschläge wäre ich sehr dankbar!
Viele Grüße,
Michael
-
Schau Dir mal an, wie das MFC System mit der Recent-File Liste umgeht. Den MFC Source-Code hast Du.
Hier in kürze die Basics:
1. Du hast einen reservierten ID Bereich.
2. Man baut einen entsprechenden OnUpdate Handler ein für die erste ID.
3. Im OnUpdate Handler werden die weiteren verfügbaren Befehle an das Menü angehängt.
4. Über ON_COMMAND_RANGE oder OnCmdMsg kannst Du diese IDs Ihrer eigentlichen Funktion zuordnen (Von mir aus über eine Map mit ID/Funktion).
5. Tooltips kommen gant von selbst über die entsprechende TTN_GETTTEXT Behandlung.Das sollte als Lesefutter erst mal langen.
Ich wiederhole nochmal: Schau Dir den Umgang mit der Recent-File Liste an.
C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\filelist.cpp
CRecentFileList::UpdateMenuNachtrag:
Wenn Du das Ganze auf Buttons ausdehnen willst wird es ungleich komplizierter wenn MFCNext und normale MFC unterstützt werden sollen. Hier sind die Grundlagen zu unterschiedlich. IMHO ist hier die MFCNext leichter zu verwenden.
-
Vielen Dank ersteinmal!
Da ich das alles in Zusammenhang mit einem kleinen Plugin-System (alles was man selber macht, ist irgendwie einfacher zu durchblicken^^) entwickle - Der Zusammenhang dürfte einleuchten -, werde ich etwas Zeit benötigen. Das ist ja ein guter Ansatz, ich werde mich dann wahrscheinlich nocheinmal melden. Die Daten habe ich ja schon an Ort und Stelle, um das irgendwie einzubauen (generierte Id, Bild, Texte, Ziel). Stellt sich nur die Frage, wo ich sie in MFC reinfriemeln muss, hehe. Aber erstmal die Quelltexte durcharbeiten.
Eines noch: meinst du mit MFCnext die Neuerungen aus dem Feature Pack? Mein Programm ist ausschließlich dafür ausgelegt - das vereinfacht auch diese Sache?Viele Grüße,
Michael
-
Ja MFCNext ist das Feature Pack.
Für ein Plugin-System solltest Du in der EXE ein Interface anbieten, dass einfach Befehl, Text, Bild und Funktion in der EXE registriert.
Die ID wird intern mit den entsprechenden Daten in einer Map verwaltet und die UI angepasst.
Ist wirklich nicht sonderlich schwierig. Mit der MFC Next könntest Du noch anders vorgehen. Hier werden Menü-Abschnitte und Buttons in sehr öhnlicher Weise verarbeitet.
Arbeite mal diese entsprechenden Sourcen durch.