Verwenden der Unicode-Schriftart in der C ++ - Konsolenanwendung

8

Wie ändere ich die Schriftart in meiner C ++ Windows Konsolen App?

Die Schriftart cmd.exe wird standardmäßig nicht verwendet (Lucida-Konsole). Wenn ich meine App über eine vorhandene cmd.exe (typing name.exe) ausführe, sieht das so aus: Ссылка , was komplett ist richtig. Aber wenn ich meine App separat ausführe (Doppelklick auf die .exe), sieht es so aus: Ссылка . Gleicher Code, zwei verschiedene Looks.

Nun frage ich mich, wie ich die Schriftart ändern kann, damit sie immer korrekt aussieht, unabhängig davon, wie sie läuft.

BEARBEITEN:

Ok, noch ein paar Informationen. Wenn ich nur dieses kleine Snippet benutze:

%Vor%

es funktioniert mit der richtigen Schriftart. Aber in meiner realen Anwendung verwende ich WriteConsoleOutput() , um stattdessen Zeichenfolgen zu drucken:

%Vor%

und dann verwendet es die falsche Schriftart. Ich benutze zwei verschiedene Fenster, die wie folgt erstellt wurden:

%Vor%

Kann ich die Codepage nur für die Standardausgabe oder so einstellen?

    
dutt 17.12.2009, 14:59
quelle

3 Antworten

2

Für Vista und höher gibt es wie bereits SetCurrentConsoleFontEx wurde gesagt .

Für 2K und XP gibt es eine undokumentierte Funktion SetConsoleFont ; z.B. Lesen Sie hier .

%Vor%

Nun ist console_font_index ein Index in die Konsolentabelle, deren Definition unbekannt ist. % Co_de% identifiziert jedoch Lucida Console (eine Unicode-Schriftart). Ich bin mir nicht sicher, wie stabil dieser Wert in verschiedenen Betriebssystemversionen ist.

AKTUALISIEREN

Nach dem Kommentar von dutt habe ich ein Experiment mit einem sauberen XP SP2 Setup durchgeführt.

  • Tatsächlich gibt GetNumberOfConsoleFonts () tatsächlich 10 zurück, und die Zeichensatz-Indizes 0..9 geben verschiedene Raster-Schriftarten an.

  • Nachdem ich eine Konsole geöffnet habe, deren Schriftart Lucida in den Eigenschaften ausgewählt ist (nur einmal; ich kann sie sofort nach dem Öffnen schließen, aber der Effekt ist gleich), gibt GetNumberOfConsoleFonts () plötzlich 12 zurück und Indizes 10 und 11 wählen Lucida in verschiedenen Größen.

Es scheint also, dass dieser Trick für mich funktioniert hat, als ich damit gespielt habe, weil ich immer mindestens eine Konsolen-App mit Lucida-Schriftart ausgewählt hatte.

Für praktische Zwecke jon hansons Antwort scheint besser. Es funktioniert nicht nur besser, es funktioniert auch. :)

    
atzz 17.12.2009, 16:46
quelle
4

Windows speichert die cmd-Einstellungen (einschließlich der Schriftart) in der Registrierung unter Verwendung des exe-Pfads als Schlüssel. Der Hauptschlüssel ist 'HKEY_CURRENT_USER \ Console'. Wenn Sie also mit regedit hineinschauen, sollten Sie mehrere Unterschlüssel sehen, die nach varous exe's benannt sind.

Um die Einstellungen einer vorhandenen Exe zu kopieren, können Sie den Schlüssel in eine Textdatei exportieren und dann die Datei bearbeiten, um den Schlüsselnamen in den Namen Ihrer exe zu ändern, und dann erneut importieren.

Sie können die Registrierung auch progamatisch ändern, obwohl ich bezweifle, dass dies sofort Wirkung zeigen würde. zu Ihrem Konsolenfenster.

    
jon-hanson 17.12.2009 15:12
quelle
3

Sie können die Funktion SetCurrentConsoleFontEx () ausprobieren.

    
Ferruccio 17.12.2009 15:27
quelle