002
08.04.2004, 15:55 Uhr
Tommix
|
Hallo, Warum einfach, wenns auch umständlich geht Stell Dir mal ein Projekt mit zehn Dialogen x zehn Eingabefeldern vor.
Du kannst den Dezimaltrenner global auf "Komma" einstellen (für Ein- und Ausgaben). Ich habs mal in 'ner Klasse verpackt:
C++: |
Header:
class CLocale : public CObject { public: enum Support { international, national };
public: CString OldLocale() const; CString CurrentLocale() const; CLocale(Support support); virtual ~CLocale();
private: char* m_pCurrentLocale; char* m_pOldLocale; };
Quellcode:
#include "stdafx.h" #include "CLocale.h"
#include <locale.h>
CLocale::CLocale(Support support) : m_pOldLocale(NULL), m_pCurrentLocale(NULL) { int size;
char* oldLocale = setlocale(LC_ALL, NULL); VERIFY(m_pOldLocale = new char[strlen(oldLocale)+1]); strcpy(m_pOldLocale, oldLocale);
switch(support) { case international: m_pCurrentLocale = new char[2]; strcpy(m_pCurrentLocale, "C"); break;
case national: size = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SENGLANGUAGE, NULL, 0); m_pCurrentLocale = new char[size];
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SENGLANGUAGE, m_pCurrentLocale, size);
break;
default: ASSERT(FALSE); }
ASSERT(m_pCurrentLocale); setlocale(LC_ALL, m_pCurrentLocale); }
CLocale::~CLocale() { ASSERT(m_pOldLocale);
setlocale(LC_ALL, m_pOldLocale);
delete[] m_pOldLocale; delete[] m_pCurrentLocale; }
CString CLocale::CurrentLocale() const { ASSERT(m_pCurrentLocale); return CString(m_pCurrentLocale); }
CString CLocale::OldLocale() const { ASSERT(m_pOldLocale); return CString(m_pOldLocale); }
|
Sobald Du lokale Schreibweise brauchst, erzegst Du mit CLocale global_locale(CLocale::national); ein Objekt. In Funktionen, die mit Punkt arbeiten sollen (z.B. für Dateiarbeit) erzeugst ein lokales CLocale locale(CLocale::international); Beim Verlassen der Funktion schaltet dessen Destruktor wieder auf "National" usw.
Gruss, Tommix |