Unicode Probleme mit TextOut



  • Hi,

    ich hab ein Programm in dem ich einzelne Zeichen per TextOut anzeige. Das funktioniert prächtig. Allerdings nicht für alle Zeichen. Genauer gesagt bereitet mir das € Zeichen Probleme, aber es gibt bestimmt auch Andere...

    Wenn ich den String L"€" in einer MessageBox ausgebe, funktioniert das.
    Wenn ich es mit TextOut mache, wird nur ein '|' angezeigt.

    Ich bin mir recht sicher das der String in Ordnung ist und meine Ausgabe funktioniert, da es für die meisten anderen Zeichen ja funktioniert...

    Gibt es da einen Trick?



  • Definierst du UNICODE in deiner Anwendung?
    Benutzt du DrawTextW( )

    Der standardmäßig in einen Device Context geladene Font ist wohl nicht Unicode. Versuch mal:

    HDC         dc;
    PAINTSTRUCT ps;
    RECT        rect;
    HFONT       old_font;
    LOGFONT     log_font;
    
    GetClientRect( window, &rect );
    
    memset( &log_font, 0, sizeof( LOGFONT ) );
    
    log_font.lfEscapement   = 90;
    log_font.lfOrientation  = 90;
    log_font.lfWeight       = FW_NORMAL;
    log_font.lfCharSet      = DEFAULT_CHARSET;
    
    dc = BeginPaint( window, &ps );
    
    old_font = reinterpret_cast< HFONT >( SelectObject( dc, CreateFontIndirect( &log_font ) ) );
    
    DrawText( dc, L"€", -1, &rect, 0 );
    
    DeleteObject( SelectObject( dc, old_font ) );
    
    EndPaint( window, &ps );
    

    Greetz, Swordfish



  • Jup, UNICODE ist definiert.

    Das Problem lag tatsächlich am Font. Ich hab deinen code einfach mal übernommen. die Zeilen

    log_font.lfEscapement   = 90;
    log_font.lfOrientation  = 90;
    

    mussten allerdings raus, sonst war der Text schief.

    Jetzt muss ich nur noch ein wenig basteln, dass der Font wieder ungefähr so aussieht wie vorher...

    /edit
    da hätt ich doch glatt vergessen mich zu bedanken. Also:
    Vielen Dank 😉



  • ⚠ An die Admins! ⚠
    Mir scheint, daß der Unicode bzw. die fehlende Kompiler-Einstellung eine erhebliche Fehlerquelle ist. Darüber sollte man mal etwas in die FAQ schreiben!


Anmelden zum Antworten