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.

Die String-Ressource

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:

Definition eines Strings

Ä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

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.



Copyright © 2004

Senden Sie Emails mit Fragen oder Kommentaren zu dieser Website an: mailto:info@cpp-tutor.de
 Wolfgang Schröder, Lerchenweg 23, D-72805 Lichtenstein. Tel: +49 7129 6470