Windows/MFC Resourcen
-
Moin, Moin!
Habe eine von CEdit abgeleitete Klasse erstellt, die u.a. das Kontextmenü erweitern soll. Das geht ja leider nicht einfach so, da das Control keine WM_INITMENUPOP sendet. Warum auch immer...
Siehe Artikel in der MSDNMan muss also komplett eine eigenes Menü erzeugen. Das ist aber sehr aufwendig, da sich die Menüs von XP bis 7 unterscheiden. Zudem müssten die zusätzlich mehrsprachig gemacht werden. Also einiges an Aufwand.
1.) Wo speichert Windows seine Resourcen (also Menüs etc.). Kann/darf ich diese laden? Somit könnte ich diese Menü einfach erweitern und hätte es auch gleich lokalisiert?
2.) Wo speichert Windows die Resourcen für Buttons etc.? Ich würde gerne darauf zurückgreifen um die Texte wie OK/Cancel auf die jeweiligen Sprachen abbilden zu können.
Gruß
Jörg
-
Dann ist wohl WM_INITPOPUP der falsche Ansatz.
Der Aufruf von Kontextmenus (Kontextmenütaste, rechter Mausklick) erzeugen WM_CONTEXTMENU (wer hätte es gedacht). Du kannst dann selbst Dein Menü anzeigen, das Du möchtest.
Du kannst gar nicht auf diese Windows-Ressourcen zugreifen.
Diese Texte kann man weder verändern noch von irgendwoher laden.
-
Martin Richter schrieb:
Der Aufruf von Kontextmenus (Kontextmenütaste, rechter Mausklick) erzeugen WM_CONTEXTMENU (wer hätte es gedacht). Du kannst dann selbst Dein Menü anzeigen, das Du möchtest.
Schon klar, jedoch ist das ja genau der Umstand. Dann muss ich zig Menüs erstellen. Das muss doch auch anders gehen.
Martin Richter schrieb:
Du kannst gar nicht auf diese Windows-Ressourcen zugreifen. Diese Texte kann man weder verändern noch von irgendwoher laden.
Hmm...wie machen das denn PropertySheets? Die Buttons sind ja zum Beispiel immer lokalisiert?
Gruß
Jörg
-
[quote="Jörg2010"]
Martin Richter schrieb:
Der Aufruf von Kontextmenus
Schon klar, jedoch ist das ja genau der Umstand. Dann muss ich zig Menüs erstellen. Das muss doch auch anders gehen.
Wenn sich diese Menüs nur durch ihre Zeichenketten unterscheiden, dann bestehen prinizipiell zwei Möglichkeiten:
- einige wenige Muster-Menüs mit dem Resourceneditor erstellen und den darin enthaltenen Zeichenketten eigene IDs vergeben (anstelle von IDC_STATIC). Dann mittels SetDlgItemText (IDC_FOOBAR, cstrItem) lokalisierte Strings für alle Strings setzen.
- das Menü (fast) komplett dynamisch erzeugen. Etwa so:
CMenu cMenu; cMenu.LoadMenu(IDR_CONTEXTMENU); CString cstrItem; cstrItem.LoadString(IDS_ANALYSIS); cMenu.GetSubMenu(0)->InsertMenu( 4, MF_BYPOSITION, ID_ANALYSIS, cstrItem ); ... cMenu.TrackPopupMenu(...) cMenu.DestroyMenu();
-
Jörg2010 schrieb:
Martin Richter schrieb:
Der Aufruf von Kontextmenus (Kontextmenütaste, rechter Mausklick) erzeugen WM_CONTEXTMENU (wer hätte es gedacht). Du kannst dann selbst Dein Menü anzeigen, das Du möchtest.
Schon klar, jedoch ist das ja genau der Umstand. Dann muss ich zig Menüs erstellen. Das muss doch auch anders gehen.
Wieso zig-Menüs? Nur ein einziges angepasstes für Deine Edit-Controls.
Jörg2010 schrieb:
Martin Richter schrieb:
Du kannst gar nicht auf diese Windows-Ressourcen zugreifen. Diese Texte kann man weder verändern noch von irgendwoher laden.
Hmm...wie machen das denn PropertySheets? Die Buttons sind ja zum Beispiel immer lokalisiert?
Die Ressourcen stecken in der ComCtl32 drin, bzw. in der entsprechenden MUI Datei! Wo siehst Du hier eine Verbindung zu Deinem Problem.
Die Kontextmenüs des Edit-Controls sind eben auch immer lokalisiert.
-
Martin Richter schrieb:
Wieso zig-Menüs? Nur ein einziges angepasstes für Deine Edit-Controls.
XP hat ein anderes Kontextmenü als Vista bzw. Windows 7. Sind schon zwei. Dann noch jeweils lokalisiert.
Martin Richter schrieb:
Die Ressourcen stecken in der ComCtl32 drin, bzw. in der entsprechenden MUI Datei! Wo siehst Du hier eine Verbindung zu Deinem Problem.
Wenn ich die finde und laden kann, ist es erlaubt diese zu verwenden? Verbindung siehe weiter unten.
Martin Richter schrieb:
Die Kontextmenüs des Edit-Controls sind eben auch immer lokalisiert.
Daher wollte ich die bereits von Windows lokalisierten als Basis nehmen, dieses zusätzlich anpassen mit eigenen Einträgen und dann anzeigen.
Gruß
Jörg
-
Dann Versuch WM_ENTERIDLE abzufangen, und Dir mit MN_GETHMENU das Handle zu besorgen. Das Problem ist IMHO hier, dass TrackPopupMenu oft mit TPM_RETURNCMD verwendet wird.
-
Martin Richter schrieb:
Dann Versuch WM_ENTERIDLE abzufangen, und Dir mit MN_GETHMENU das Handle zu besorgen. Das Problem ist IMHO hier, dass TrackPopupMenu oft mit TPM_RETURNCMD verwendet wird.
MN_GETHMENU liefert leider immer NULL zurück.
-
Hast Du in WM_ENTERIDLE auch wirklich das Handle des anderen Fenster bei MSGF_MENU gewählt?
Ich bekomme ein Menü-Handle, wenn ich das Ganze innerhalb des Edit-Controls mache.
-
Martin Richter schrieb:
Hast Du in WM_ENTERIDLE auch wirklich das Handle des anderen Fenster bei MSGF_MENU gewählt?
Nein.
Daran hat es gelegen. Herzlichen Dank dafür.Gruß
Jörg