Следующие две функции получат размер окна несколько более прямо.
Обратите внимание, что, используя gcc, я обнаружил, что ни этот подход, ни GetConsoleScreenBufferInfo не работают, если программа передана по конвейеру.Это что-то вроде боли, поскольку / f тогда тоже не работает.Видимо данные экрана недоступны в трубе.
Хм, вышеприведенное замечание, конечно, чрезвычайно глупо.;) Это STDOUT, это не экран в трубе!Это означает, что я предпочитаю использовать STD_ERROR_HANDLE выше STD_OUTPUT_HANDLE.Я гораздо реже направляю стандартную ошибку за пределы экрана, чем стандартный вывод.
typedef struct _CONSOLE_FONT_INFO {
DWORD nFont;
COORD dwFontSize;
} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
BOOL WINAPI GetCurrentConsoleFont(
HANDLE hConsoleOutput,
BOOL bMaximumWindow,
PCONSOLE_FONT_INFO lpConsoleCurrentFont
);
/* Get the window width */
int getww_(void)
{
CONSOLE_FONT_INFO info;
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &info);
return info.dwFontSize.X;
}
/* Get the window height */
int getwh_(void)
{
CONSOLE_FONT_INFO info;
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &info);
return info.dwFontSize.Y;
}