Я просто играю с простыми консольными приложениями на C ++.
Я пытаюсь изменить размер окна консоли, и оно работает нормально. Сначала я изменяю размер фактического окна, затем буфер и все в порядке, но как только я попытался сжать код, окно больше не изменяет размеры. Это действительно не так важно. Мне просто интересно, так как большинство предложений, на которые я смотрел, объявляют SMALL_RECT
сюда.
Я использую TDM-GCC 64 и Eclipse с std = c ++ 17.
Это работает, и окно изменено в размере правильно
void SetCMDSizeAndTitle(short width, short height, string title) {
COORD coord = { width, height };
SMALL_RECT rect;
rect.Top = 0;
rect.Left = 0;
rect.Bottom = height - 1;
rect.Right = width - 1;
SetConsoleTitle(TEXT(title.c_str()));
SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &rect);
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
Однако это не работает, окно остается размером по умолчанию
void SetCMDSizeAndTitle(short width, short height, string title) {
COORD coord = { width, height };
SMALL_RECT rect = { 0, 0, height - 1, width -1 };
SetConsoleTitle(TEXT(title.c_str()));
SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &rect);
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
Это не так уж важно. Это просто лучше, когда строк кода меньше, и мне просто любопытно, почему он не работает.
Причина, по которой он не работает, заключается в том, что согласно MSDN переменные не в том порядке, в котором вы предполагаете. MSDN определил структуру как
typedef struct _SMALL_RECT {
SHORT Left;
SHORT Top;
SHORT Right;
SHORT Bottom;
}
Это означает, что вы должны следовать этому порядку в списке инициализации. Это означает, что вы должны иметь
SMALL_RECT rect = {0, 0, width -1, height - 1};
// L T R B
Других решений пока нет …