【发布时间】:2020-06-21 12:59:06
【问题描述】:
我在我的环境中安装了自定义字体(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 Gothic”似乎都可以正常工作。但是“Pixel Operator Mono”没有。该字体显示在我的 CMD 属性中,我什至可以将其设置为默认字体。但是为什么我不能改变这种方式呢?我已经检查过了,SetCurrentConsoleFontEx 正在返回成功。
编辑 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;
}
【问题讨论】:
-
函数返回 1,GetLastError 返回 0。应该没有错误。
-
尽管我们愿意相信您的话,但十分之九的开发人员会收到错误报告。显示您的错误处理代码。
-
编辑帖子以添加处理内容
-
错误处理代码仍然缺失。
标签: c++ c++11 winapi visual-c++