У меня есть собственный шрифт, установленный в моей среде (Pixel Operator Mono), и я разрабатываю консольное приложение, которому нужен этот шрифт. Это моя функция:
void set_font() {
CONSOLE_FONT_INFOEX cfi;
cfi.cbSize = sizeof(cfi);
cfi.nFont = 0;
cfi.dwFontSize.X = 0;
cfi.dwFontSize.Y = 27;
cfi.FontFamily = FF_DONTCARE;
cfi.FontWeight = FW_NORMAL;
std::wcscpy(cfi.FaceName, L"Pixel Operator Mono");
SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
}
Использование «Consolas», «Courier New» или даже «MS Gothi c», кажется, работает нормально. Но «Pixel Operator Mono» - нет. Этот шрифт отображается в моих свойствах CMD, и я даже могу установить его по умолчанию. Но почему именно я не могу так измениться? Я уже проверил, и SetCurrentConsoleFontEx возвращает успех.
Edit 1: Я использую эту функцию для получения ошибок в виде строк. Но при отладке я вижу, что errorMessageId
всегда получает 0. Я вызываю эту функцию сразу после вызова SetCurrentConsoleFontEx()
.
std::string GetLastErrorAsString()
{
//Get the error message, if any.
DWORD errorMessageID = ::GetLastError();
if(errorMessageID == 0)
return std::string(); //No error message has been recorded
LPSTR messageBuffer = nullptr;
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
std::string message(messageBuffer, size);
//Free the buffer.
LocalFree(messageBuffer);
return message;
}