Объявление SMALL_RECT = {}, не изменяет размер окна консоли

Я просто играю с простыми консольными приложениями на 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);
}

Это не так уж важно. Это просто лучше, когда строк кода меньше, и мне просто любопытно, почему он не работает.

0

Решение

Причина, по которой он не работает, заключается в том, что согласно 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
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector