В API консоли Windows вы можете собирать данные для случая, когда размер буфера изменяется (через окно изменения размера), но вы не можете собирать данные для того, когда размер окна изменяется.Чтобы проиллюстрировать эту проблему, вот небольшая программа:
#include <Windows.h>
#include <stdio.h>
#define STR_BUF_SIZE 128
#define ENABLE_WINDOW_INPUT
int main() {
HANDLE screenBufferHandle = CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL
);
SetConsoleActiveScreenBuffer(screenBufferHandle);
HANDLE in = GetStdHandle(STD_INPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO info;
INPUT_RECORD recordBuffer[32];
char strBuf[STR_BUF_SIZE];
while (1) {
// Collect the input
int inputLeft, inputToProcess;
do {
GetNumberOfConsoleInputEvents(in, &inputLeft);
if (!inputLeft) {
break;
}
inputLeft -= 32;
ReadConsoleInput(
in,
recordBuffer,
32,
&inputToProcess
);
int i = 0;
while (i < inputToProcess) {
if (recordBuffer[i].EventType == WINDOW_BUFFER_SIZE_EVENT) {
COORD size = recordBuffer[i].Event.WindowBufferSizeEvent.dwSize;
sprintf_s(strBuf, STR_BUF_SIZE, "Event recorded, %dx%d\n", size.X, size.Y);
OutputDebugString(strBuf);
}
i++;
}
} while (inputLeft > 0);
GetConsoleScreenBufferInfo(screenBufferHandle, &info);
}
}
Это сообщит (для отладки), когда размер буфера изменен.Вот когда это становится проблемой: размер буфера не изменяется , если :
В этом случае размер буфера не изменяется, окно сжимается, иручка на полосе прокрутки делает тоже самое.Однако я хочу, чтобы окна сообщали об этом событии , потому что :
Я бы хотел, чтобы размер буфера был точно таким же, как у окна, чтобы скрыть полосы прокрутки.