Strings
String-Ressourcen stellen eine Alternative zum Abspeichern von kurzen Texten
(max. 255 Zeichen) innerhalb einer Anwendung dar. Der Vorteil der String-Ressource
besteht darin, dass Sie beim Ändern eines Textes nicht Ihren Quellcode neu übersetzen
muss sondern lediglich die Ressource-Datei. Außerdem arbeiten einige Erweiterungen,
wie z.B. die Statuszeile, eng mit der String-Ressource zusammen.
 |
Erstellen Sie jetzt wieder ein neues SDI-Projekt mit dem Namen
SBmpUser. Diese Projekt werden wir in dieser und der folgenden Lektion
ausbauen. Gehen Sie danach in die Ressource-Ansicht und öffnen Sie dort die
Ressource String Table. Unterhalb dieser Ressource werden Sie den Eintrag
Zeichenfolgentabelle finden. Führen Sie einen Doppelklick darauf aus
und der String-Editor wird geöffnet.

|
Der Anwendungs-Assistent hat Ihrem Projekt schon eine ganze Reihe von Strings
hinzugefügt. Die String-Tabelle ist in drei Spalten unterteilt: der ID,
dem Wert und dem Titel. ID gibt den Bezeichner an, unter
dem der String geladen werden kann; das wie erfahren Sie gleich noch. Wert
ist der nummerische Wert für die ID und Titel gibt den Text an, den die
String-Ressource repräsentiert.
 |
Fügen wir der String-Ressource jetzt vier neue Einträge hinzu.
Dazu drücken Sie im Editorfenster entweder die rechten Maustaste und wählen
aus dem eingeblendeten Kontext-Menü den Eintrag Neue Zeichenfolge aus
oder Sie führen einen Doppelklick auf den letzten, leeren Eintrag in der Tabelle
durch. Danach wird folgender Dialog eingeblendet:

Ändern Sie die vorgegebene ID IDS_STRINGx durch überschreiben in IDS_ETITLE
ab und geben Sie im Titelfeld den Text 'Mouse click' ein. Drücken Sie
dann die RETURN-Taste. Der eingegebene Text wird nun unter der angegebenen ID
in der String-Ressource abgespeichert. Erstellen Sie auf die gleiche Art und
Weise die drei restlichen String-Ressourcen mit folgenden Daten:
| IDS_ETEXT |
You've pressed the
left mouse button |
| IDS_GTITLE |
Maustaste |
| IDS_GTEXT |
Sie haben die rechte
Maustaste gedrückt. |
|
 |
IDs von String-Ressourcen sollten immer mit dem Präfix IDS_xxx
beginnen. Sie können in einem String auch einen Zeilenvorschub, Tabulator oder
ähnliches einfügen, in dem Sie die entsprechenden ESCAPE-Sequenzen (z.B. \n
oder \t) eingeben. Außerdem können Sie den nummerischen Wert der String-ID
auch selbst bestimmen. Geben Sie dazu im oben dargestellten Dialog nach der
ID die Folge '= neuer Wert' ein. Eine Doppeldeutigkeit des nummerischen
Wertes wird vom String-Editor abgefangen.
|
Um einen Text aus der String-Ressource zu laden stehen zwei Möglichkeiten zur
Verfügung. Im ersten Fall rufen Sie die API-Funktion LoadString(...) auf.
Die Funktion erhält u.a. als Parameter die ID des zu ladenden Strings. Ferner benötigt
die Funktion noch das Instanzen-Handle Ihrer Anwendung. Sie erhalten dies durch
die Funktion AfxGetInstanceHandle(...). Alternativ kann anstelle der Funktion
LoadString(...) die gleichnamige Methode der Klasse CString aufgerufen
werden. Der Vorteil dieser Methode besteht darin, dass Sie sich nicht selbst um
die Bereitstellung des Puffers für den String kümmern müssen. Egal wie lang der
String ist, die Methode LoadString(...) allokiert den benötigten Speicherplatz.
 |
Versuchen Sie nun die vier vorhin erstellten Strings zu laden.
Beim Drücken der linken Maustaste soll eine Messagebox dargestellt werden, die
im Titel den String mit der ID IDS_ETITLE anzeigt und als Messagebox-Text den
String IDS_ETEXT. Beim Drücken der rechten Maustaste ist eine entsprechende
Messagebox mit den Strings IDS_GTITLE und IDS_GTEXT darzustellen
 |
Wenn Sie genug geschwitzt haben kann ich Ihnen auch meine Lösung anzeigen. |
Lösung zur Ausgabe von Strings
void CSBmpUserView::OnLButtonDown(UINT
nFlags, CPoint point)
{
// TODO: Code für die Behandlungsroutine für Nachrichten hier
einfügen....
// String-Objekte erstellen
CString CTitle, CText;
// Strings aus Ressource
laden
CTitle.LoadString(IDS_ETITLE);
CText.LoadString(IDS_ETEXT);
// Messagebox ausgeben
MessageBox(CText,CTitle);
}
void CSBmpUserView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Code für die Behandlungsroutine für Nachrichten hier
einfügen....
// String-Objekte erstellen
CString CTitle, CText;
// Strings aus Ressource
laden
CTitle.LoadString(IDS_GTITLE);
CText.LoadString(IDS_GTEXT);
// Messagebox ausgeben
MessageBox(CText,CTitle);
} |
Im Beispiel wird die zum Laden der Strings die komfortablere Methode
LoadString(...) der Klasse CString verwendet. Die Darstellung der
Messagebox mit den entsprechenden Texten sollte Ihnen in der Zwischenzeit
keine Probleme mehr bereitet haben.
Ende der Lösung
|
Übersetzen und starten Sie das Programm. Beim Drücken der linken bzw. rechten
Maustaste sollten Sie dann eine entsprechende Messagebox angezeigt bekommen.
Verändern Sie auch einmal den Text der String-Ressource und beobachten Sie
dann, welche Programmteile danach neu übersetzt werden.
|
Verlassen wir damit die String-Ressource und sehen uns in der nächsten Lektion
die Bitmap-Ressource an. Sie sollten dafür aber das bisherige Beispiel abspeichern,
da wir es in der nächsten Lektion weiter ausbauen werden.
|