Изменение размера окна отчета API консоли Windows - PullRequest
1 голос
/ 02 апреля 2019

В 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);
    }

}

Это сообщит (для отладки), когда размер буфера изменен.Вот когда это становится проблемой: размер буфера не изменяется , если :

  • Буфер уже выше окна (появляются вертикальные полосы прокрутки) AND

  • Событие изменения размера влияет только на ось Y

В этом случае размер буфера не изменяется, окно сжимается, иручка на полосе прокрутки делает тоже самое.Однако я хочу, чтобы окна сообщали об этом событии , потому что :

Я бы хотел, чтобы размер буфера был точно таким же, как у окна, чтобы скрыть полосы прокрутки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...