如何在我的C++ Windows控制檯應用程序中更改字體?在C++控制檯應用程序中使用Unicode字體
它似乎沒有使用默認使用的字體cmd.exe(Lucida控制檯)。當我通過現有的cmd.exe運行我的應用程序(鍵入name.exe)時,它看起來像這樣:http://dathui.mine.nu/konsol3.png這是非常正確的。 但是,當我獨立運行我的應用程序(雙擊.exe)時,它看起來像這樣:http://dathui.mine.nu/konsol2.png。 相同的代碼,兩種不同的外觀。
所以現在我想知道如何改變字體,所以無論它如何運行,它總是看起來是正確的。
編輯:
好,一些更多的信息。當我使用這個小片段時:
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);
它使用正確的字體。但在我的實際應用中我使用WriteConsoleOutput()
打印字符串代替:
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);
}
,然後使用錯誤的字體。我用兩個不同的窗口,像這樣創建:
mHandleA = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
我可能是設置語言編碼的只是標準輸出什麼?
嗯......奇怪的是,有一種方法來檢測控制檯與雙擊與幾個例外情況。這篇文章是一個好的開始,但它不夠遠:http://www.codeguru.com/cpp/misc/misc/consoleapps/article.php/c15893/ – 2009-12-17 15:03:24
您使用哪種編譯器? – SjB 2009-12-17 15:09:21
也許跟蹤啓動代碼 - 從pre main() - 查看實際構建控制檯窗口本身的代碼是什麼?我假設編譯器/控制檯項目提供的.exe文件必須有一些代碼,用於檢測您的應用程序是否已經在控制檯中啓動,或者是否需要控制檯,以便在這種情況下爲您創建控制檯窗口。這是我的直覺,不是研究的事實,但可能只有幾分鐘的調試才能驗證。在這一點上,你可以看到它的源代碼,看看你可能需要做什麼才能訪問該控制檯HWND,以不同的方式設置它的字體...... – Mordachai 2009-12-17 15:11:04