Visual C++ Ausgaben (Formatierung) |
Page updated: 26. Juli 2006
Inhalt: Das Programm - Lokalisation und Formatierung
Demoprojekt ausgabe.zip
Das Programm.
Ausgaben in Textfeldern können ebenso wie bei Konsolenprogrammen formatiert werden. Die Formatierung lehnt sich in VC++ an die Formatierung mit Formatstrings wie bei C an. Numerische Werte müssen formatiert ausgegeben werden, da Textfelder nur Zeichenketten ausgeben können. Ebenso läßt sich wie bei C++ Programmen eine Lokalisierung von numerischen Werten bei VC++ vornehmen. Das Programm:
Bei diesem Dialogfenster findet sich das Minimierungs Icon in der Fensterleiste. Es wird über die Eigenschaft des Dialogfensters, Reiter "Styles", "Minimize Box" aktiviert.
TOP
Lokalisation und Formatierung.
Zur Lokalisierung müssen die Headerdateien wie bei einem Standard C++ Programm eingebunden werden:
// ausgabeDlg.cpp : implementation file
...
#include <clocale>
// oder
// #include <locale>
// #include <iostream>
...
Eine generelle Lokalisierung könnte einerseits für das gesamte dialog-basierende VC++ Programm in der Methode OnInitDialog() vorgenommen werden (warum Dutch als Lokalisierung bei Deutsch ist bei den C++ Hinweisen erläutert):
...
BOOL CAusgabeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
// TODO: Add extra initialization here
//
// setlocale(LC_NUMERIC, "German");
// oder
// std::cout.imbue(std::locale("Dutch"));
return TRUE; // return TRUE unless you set the focus to a control
}
...
Im Beispielprogramm wird aber an anderer Stelle die Lokalisierung vorgenommen.
Die Methoden der beiden Buttons enthalten die Formatierungen. Zuerst wird mit der Beep() Funktion der Ton des PC Lautsprechers mit 1000 Hz für 333 ms aktiviert. Sonderzeichen können wie unter Standard C/C++ üblich mit ihrem Oktalcode ausgegeben werden, ebenso sind Steuerzeichen wie \n möglich. Werden zwei Zeichenketten mit dem C++ Operator + verknüpft, ist ein cast wie in Standard C++ notwendig. die Formatierung erfolgt mit der Methode Format() der CString Klasse. Die Parameterliste der Funktion Format() ist mit der Syntax der Parameterliste der Standard C Funktion printf() identisch.
...
void CAusgabeDlg::OnAusgabe1()
{
Beep(1000, 333);
m_text1 = "Beep wurde mit Beep(1000, 333) ausgegeben,\n"
+ (CString)"\251 Copyright mit \\251 (Oktal 251) ausgegeben.";
m_text2.Format("%i %s", -27, "wurde als Zahl ausgegeben.");
m_text3.Format("%f %s", 47.11, "wurde als Zahl ausgegeben.");
m_text4.Format("%c %s", 'C', "wurde als Zeichen ausgegeben.");
m_text5 = (CString)"Hallo" + " wurde als Zeichenkette ausgegeben.";
UpdateData(false);
}
...
Die Lokalisierung erfolgt mit Klick auf den Button "Ausgabe 2", weshalb die ersten drei Scheckbeträge mit einem Komma statt eines Dezimalpunktes ausgegeben werden. Die Zurücknahme der Lokalisierung erfolgt wie bei Standard C++ Programmen, daher wird der vierte Scheckbetrag mit einem Dezimalpunkt ausgegeben. Alle in der in Standard C printf() vorhandenen Formatierungen sind bei der Format() Methode möglich:
void CAusgabeDlg::OnAusgabe2()
{
const CString Formatstring
= (CString) "%s%4c%4c%4c%4c\n%s%4x%4x%4x%4x\n%"
+ "s%4o%4o%4o%4o\n%s%4i%4i%4i%4i";
setlocale(LC_NUMERIC, "German");
// oder
// std::cout.imbue(std::locale("Dutch"));
m_text6.Format("%s%10.2f%s", "Scheckbetrag:", 132.456789, " EUR");
m_text7.Format("%s%010.2f%s", "Scheckbetrag:", 132.456789, " EUR");
m_text8.Format("%s%+10.2f%s", "Scheckbetrag:", 132.456789, " EUR");
setlocale(LC_NUMERIC, "C");
// oder
// std::cout.imbue(std::locale("C"));
m_text9.Format("%s%-10.2f%s", "Scheckbetrag:", 132.456789, " EUR");
m_text10.Format(Formatstring,
"Zeichen:", 0x4B, 0113, 75, 'K',
"Hexadezimal:", 0x4B, 0113, 75, 'K',
"Oktal:", 0x4B, 0113, 75, 'K',
"Dezimal:", 0x4B, 0113, 75, 'K');
UpdateData(false);
}
TOP
Dr. J. Kubiak j.kubiak@gmx.net