Как добавить вертикальную полосу прокрутки в полноэкранную консоль win32? - PullRequest
1 голос
/ 02 мая 2019

Когда я переключаю консоль win32 в полноэкранный режим, вертикальная полоса прокрутки исчезает.Когда текст переходит в нижнюю часть экрана, он не прокручивается вверх.Вновь записанный вывод не представляется пользователю, потому что он ниже.

Это стиль:

if (isFullScreen)
{
    // Set the full screen window style.
    style = GetWindowLong(handle, GWL_STYLE);

    style &= ~(WS_BORDER | WS_CAPTION | WS_THICKFRAME | WS_OVERLAPPEDWINDOW);

    SetWindowLong(handle, GWL_STYLE, style);

    // Minimalize, then show maximized to avoid the cursor blink bug in conhost.exe.
    ShowWindow(handle, SW_MINIMIZE);
    ShowWindow(handle, SW_SHOWMAXIMIZED);

    // Set the font size
    setFontSize(fontSize);
}

Я искал в Интернете, но, по понятным причинам, это не распространено.

Как я могу добавить вертикальную полосу прокрутки к этому в полноэкранном режиме?

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Официальный способ установить консоль в полноэкранный режим - вызвать SetConsoleDisplayMode().

В Windows 10 Pro версии 1803 следующий код показывает вертикальную полосу прокрутки без лишних слов:

#include <iostream>
#include <windows.h>

int main()
{
    HANDLE const hConsole = ::GetStdHandle( STD_OUTPUT_HANDLE );
    if( hConsole == INVALID_HANDLE_VALUE ||
        ! ::SetConsoleDisplayMode( hConsole, CONSOLE_FULLSCREEN_MODE, nullptr ) )
    {
        DWORD const err = ::GetLastError();
        std::cerr << "Failed to set console fullscreen mode. System error: " << err << "\n";
        return 1;
    }

    for( int i = 0; i < 200; ++i )
    {
        std::cout << "Hello World!\n";
    }
    return 0;
}

Обратите внимание, что SetConsoleDisplayMode() может завершиться ошибкой, если процесс не подключен к консоли (например, путем передачи флага CREATE_NO_WINDOW в CreateProcess()) или если STDOUT перенаправлен в файл.

0 голосов
/ 02 мая 2019

На моем компьютере я могу видеть появление полноэкранной консоли и вертикальной полосы прокрутки.Моя система Win10, используя vs2017.Это мой код.

#include "pch.h"
#include <iostream>
#include <Windows.h>

void full_screen()
{
    HWND hwnd = GetForegroundWindow();
    int cx = GetSystemMetrics(SM_CXSCREEN);            /* Screen width pixels */
    int cy = GetSystemMetrics(SM_CYSCREEN);            /* Screen Height Pixel */

    LONG l_WinStyle = GetWindowLong(hwnd, GWL_STYLE);   /* Get window information */
    /* Set window information to maximize the removal of title bar and border*/
    SetWindowLong(hwnd, GWL_STYLE, (l_WinStyle | WS_POPUP | WS_MAXIMIZE) & ~WS_CAPTION & ~WS_THICKFRAME & ~WS_BORDER);

    SetWindowPos(hwnd, HWND_TOP, 0, 0, cx, cy, 0);
}

int main()
{
    full_screen();
    while(1)
    {
        std::cout << "Hello World!\n"; 
    }
    return 0;
}

Результат отладки:

2

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