Mithilfe der Unicode-font in C++ console app

Wie ändere ich die schriftart in meinem C++ - Windows-Konsole-app?

Es scheint nicht, die Verwendung der schriftart cmd.exe standardmäßig verwendet (Lucida Console). Wenn ich meine app durch ein vorhandenes cmd.exe (Eingabe name.exe) sieht es wie folgt aus: http://dathui.mine.nu/konsol3.png die entierly richtig.
Aber wenn ich meine app separat (doppelklicken Sie auf die .exe) sieht es wie folgt aus: http://dathui.mine.nu/konsol2.png.
Derselbe code zwei verschiedene looks.

So, jetzt meine Frage wie kann ich die schriftart ändern, so dass es sieht immer richtig, unabhängig davon, wie Sie ausgeführt werden.


EDIT:

Ok, ein paar mehr Informationen. Als ich gerade dieses kleine snippet:

SetConsoleOutputCP(CP_UTF8);
wchar_t s[] = L"èéøÞǽлљΣæča";
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
char* m = new char[bufferSize]; 
WideCharToMultiByte(CP_UTF8, 0, s, -1, m, bufferSize, NULL, NULL);
wprintf(L"%S", m);

es funktioniert mit der richtigen Schrift. Aber in meiner realen Anwendung verwende ich WriteConsoleOutput() zu druckenden Zeichenfolgen statt:

CHAR_INFO* info = new CHAR_INFO[mWidth * mHeight];
for(unsigned int a = 0; a < mWidth*mHeight; ++a) {
    info[a].Char.UnicodeChar = mWorld.getSymbol(mWorldX + (a % mWidth), mWorldY + (a / mWidth));
    info[a].Attributes = mWorld.getColour(mWorldX + (a % mWidth), mWorldY + (a / mWidth));
}
COORD zero;
zero.X = zero.Y = 0;
COORD buffSize;
buffSize.X = mWidth;
buffSize.Y = mHeight;
if(!WriteConsoleOutputW(window, info, buffSize, zero, &rect)) {
    exit(-1);
}

und dann verwendet er die falsche schriftart. Ich benutze zwei verschiedene Fenster, wie folgt erstellt:

mHandleA = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
                                     NULL, CONSOLE_TEXTMODE_BUFFER, NULL);

Könnte ich die Einstellung der codepage nur für die standard-Ausgabe oder sowas???

  • Hm ... komisch, gibt es eine Möglichkeit zu erkennen, Konsole vs doppelklicken Sie mit wenigen Ausnahmefällen. Dieser Artikel ist ein guter Anfang, aber es geht nicht weit genug: codeguru.com/cpp/misc/misc/consoleapps/article.php/c15893
  • Welche compiler verwenden Sie ?
  • Vielleicht verfolgen Sie die startup-code aus der pre-main () -, um zu sehen, was code ist tatsächlich für die Konsole-Fenster selbst? Ich gehe davon aus, dass es code, der Teil von Ihr .exe-Datei geliefert, die von der compiler - / Konsolen-Projekt, das erkennt, wenn die app startet in einer Konsole schon, oder wenn es braucht, in dem Fall schafft ein Konsole-Fenster für Sie. Das ist meine intuition, nicht recherchiert Tatsache, könnte aber nachprüfbar mit nur ein paar Minuten zu Debuggen. An welcher Stelle sehen Sie den Quellcode für dieses, und sehen, was Sie möglicherweise tun müssen, um Zugriff auf die Konsole HWND, um die schriftart anders...
  • Ipthnc: klingt wie ein Umweg, aber danke für den Tipp. SjB: Visual Studio 2008 proff. Mordachai: Hm, wo könnte ich finde die pre-main-code?
InformationsquelleAutor dutt | 2009-12-17
Schreibe einen Kommentar