Я пишу консольное приложение с использованием WinAPI, и я заметил странное поведение
SetCurrentConsoleFontEx
.Использование нескольких типов шрифтов в консольном приложении с помощью WinAPI
Приложение использует два типа шрифтов:
// small font
CONSOLE_FONT_INFOEX font0;
font0.cbSize = sizeof(CONSOLE_FONT_INFOEX);
font0.nFont = 0;
font0.dwFontSize = { 8, 16 };
font0.FontFamily = FF_DONTCARE;
font0.FontWeight = FW_NORMAL;
wcscpy_s(font0.FaceName, L"Consolas");
// large font
CONSOLE_FONT_INFOEX font1;
font1.cbSize = sizeof(CONSOLE_FONT_INFOEX);
font1.nFont = 1;
font1.dwFontSize = { 16, 32 };
font1.FontFamily = FF_DONTCARE;
font1.FontWeight = FW_BOLD;
wcscpy_s(font1.FaceName, L"Consolas");
SetCurrentConsoleFontEx(outHnd, FALSE, &font1)
printf("This text is big!\n");
SetCurrentConsoleFontEx(outHnd, FALSE, &font0);
printf("This text is small!\n");
После запуска приложения как текстовые строки выглядят одинаково (как font0
).
Но если добавить Sleep(100)
между printf("This text is big!\n")
и SetCurrentConsoleFontEx(outHnd, FALSE, &font0)
,
программа будет работать правильно (первый текст больше, чем 2).
Это также работает, когда я использую цикл задержки:
int i = 0;
while (i < 100000000)
i++;
Почему это происходит и как изменить шрифты без дополнительных функций задержки/петель?
Каковы возвращение значения вызовов 'SetCurrentConsoleFontEx' в примере? – tambre
@tambre Они всегда возвращаются 1. – dsonyy
да, этот эффект присутствует. может подтвердить – RbMm