Umlautproblem bei den wx Controls lösen (Linux)

Problem 1:

Sie programmieren eine wxWidgets Anwendung und stellen fest (Zumindest in Linux), das kein Text mehr dargestellt

wird sobald Sie Umlaute in z.B. ein statisches Textcontrol Element als Label, einfügen wollen.

Dieses Problem ist wie folgt zu beseitigen.

 

Problem 2:

Sie stellen Fest das es Darstellungsprobleme mit Umlauten gibt sobald sich Sonderzeichen im Quelltext befinden.

 

Lösung zu Problem 1 (Linux):

Fügen Sie in die Funktion

bool <Programmname>App::OnInit()

der Datei

"<Programmname>App.cpp"

 

folgende Zeilen hinzu:

wxLocale* locale = new wxLocale();
locale->Init(wxLANGUAGE_GERMAN, wxLOCALE_LOAD_DEFAULT);

Beispiel:

Hier ein Ausschnitt aus einem Quelltext:

bool Adv_TextCtrlApp::OnInit()
{
    wxLocale* locale = new wxLocale();
    locale->Init(wxLANGUAGE_GERMAN, wxLOCALE_LOAD_DEFAULT);
    //(*AppInitialize
    bool wxsOK = true;
    wxInitAllImageHandlers();
    if ( wxsOK )
    {
        Adv_TextCtrlDialog Dlg(0);
        SetTopWindow(&Dlg);
        Dlg.ShowModal();
        wxsOK = false;
    }
//*)
    return wxsOK;
}

Lösung zu Problem 2 (Windows)

Sie müssen ein Compilerparameter hinzufügen damit der Compiler die Strings im Quelltext als

iso-8859-1 Zeichensatz behandelt.

in der Codeblocks IDE wird der Quelltext sobald Grafische Sonderzeichen erkannt werden in den UTF8  Zeichensatz

umgewandelt.Das erzeugt, zumindest bei mir, eine Fehlerhafte Ausgabe des Textes.

Um das Problem zu beseitigen ist folgender Compilerparameter hinzuzufügen.

-fexec-charset=iso-8859-1

In Codeblocks geht man zum Menüpunkt

Settings -> Compiler -> Tab "Compiler Settings"

Dort klickt man mit der rechten Maustaste auf einen der Einträge.

Es öffnet sich ein Untermenü in dem der Menüpunkt "New Flag" angeklickt wird.

Es öffnet sich ein Fenster in dem folgende Werte eingetragen werden.

Name               =>  Irgend ein e Bezeichnung für das Flag z.B. "Set iso-8859-1 Charset"
Compiler flags => -fexec-charset=iso-8859-1

Ob das Problem unter Linux auch so behoben werden kann habe ich noch nicht getestet.