StringTable zur Laufzeit ändern

Azatoth

Mitglied
Hallo zusammen,
ich möchte bei einer bestehenden Anwendung eine Sprachauswahl nachziehen. Die Bezeichnungen von allen sichtbaren Elementen liegen als XML-Dateien vor. Es sollte auf mehrere *.rc Dateien und DLLs verzichtet werden. Das bedeutet das alle sichtbaren Bezeichnungen zur Laufzeit aus der jeweiligen XML-Datei geladen werden.

Meine Frage lautet nun, gibt es eine Möglichkeit die Einträge der StringTable zur Laufzeit zu ändern?
 

Endurion

Erfahrenes Mitglied
Nicht vom eigenen Programm, da Windows auf laufende Programme keinen Schreibzugriff zuläßt. Bei einem anderen Programm kannst du mit UpdateResource darin rumpörkeln, sofern dir das interne Format bekannt ist.
 

Azatoth

Mitglied
Danke für die Antwort Endurion.
Gibt es vielleicht sonst irgend eine Möglichkeit wie man eine Mehrsprachige MFC-Anwendung ohne mehrere *.rc Dateien realisieren kann.
 

Endurion

Erfahrenes Mitglied
Nunja, häßliche Handarbeit. Du kannst dir zum Beispiel ein LoadStringEx bauen (das gibt es dummerweise nicht), das eine Sprach-ID erwartet und dann den Text aus der entsprechenden Resource zieht. String Tables haben eine Sprach-Eigenschaft, d.h. du kannst verschiedene Sprachen in einer .rc haben.

Ich habe mir für sowas mal eine Funktion gebaut, der ich ein Parent-HWND übergebe. Die Funktion geht dann rekursiv mit EnumChilds über das Fenster, und zieht für jedes zutreffende Fenster den Text aus den Resourcen. Das müßte man dann nur einmal beim Erstellen eines Fensters/Dialoges aufrufen.