在Windows控制台API中,您可以为BUFFER调整大小时(通过窗口调整大小)收集输入,但是无法为WINDOW调整大小时收集输入。为了说明这个问题,这是一个小程序:
#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);
}
}
这将在调整缓冲区大小时报告(调试)。这是一个问题所在:如果,缓冲区大小未调整:
缓冲区已经比窗口高(出现垂直滚动条) AND
调整大小事件仅影响Y轴
在这种情况下,缓冲区不会调整大小,窗口会缩小,滚动条上的句柄也会调整大小。但是,我希望Windows 因为报告此事件:
我想保持缓冲区与窗口的大小完全相同,以隐藏滚动条。