Как удалить полосу прокрутки из полноэкранной консоли в C #? - PullRequest
0 голосов
/ 03 мая 2018

Короче говоря: я только что взял C # около недели назад. Большая часть моих знаний в области программирования приходит из Java. Я хочу попробовать свои силы в создании текстовой приключенческой игры (да, я знаю, что могу использовать Unity, но я хочу сделать это с нуля), и часть настроек - получить полноэкранное окно консоли без отвлекающих факторов.

Я копался в StackOverflow и до сих пор собрал это вместе:

    [DllImport("kernel32.dll")]
    private static extern IntPtr GetStdHandle(int handle);

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool SetConsoleDisplayMode(IntPtr ConsoleOutput, uint Flags, out COORD NewScreenBufferDimensions);

    [StructLayout(LayoutKind.Sequential)]
    public struct COORD
    {
        public short X;
        public short Y;

        public COORD(short X, short Y)
        {
            this.X = X;
            this.Y = Y;
        }
    }

Наряду с этим битом в методе Main:

IntPtr hConsole = GetStdHandle(-11);
SetConsoleDisplayMode(hConsole, 1, out COORD b1);

Console.ReadLine();

Итак, мне удалось войти в полноэкранный режим, но проблема в том, что полоса прокрутки все еще есть.

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

Из кода, который мне удалось собрать, кажется, что буфер уже воспроизводится для перехода в полноэкранный режим. Похоже, что метод SetConsoleDisplayMode делает это.

Итак, мой вопрос, как мне добавить удаление полосы прокрутки к этому коду? Я думаю, что это как-то связано со структурой 'COORD', но, честно говоря, я совершенно не в своем духе здесь с новым языком и новыми концепциями (например, структурами), любая помощь будет оценена!

1 Ответ

0 голосов
/ 03 мая 2018

Полоса прокрутки исчезнет, ​​когда высота буфера будет равна высоте экрана (в строках). Вы можете проверить это с окном noraml cmd.exe.

Когда вы сделаете консоль полноэкранной, Windows увеличит ваш буфер, если он будет слишком маленьким, и вернет новый размер в последнем аргументе SetConsoleDisplayMode. Вы, вероятно, нуждаетесь в этом размере по мере продвижения вашего проекта. Поэтому, если вы сделаете буфер действительно маленьким, Windows заменит его.

Чтобы изменить размер буфера, вам нужно позвонить SetConsoleScreenBufferSize:

BOOL WINAPI SetConsoleScreenBufferSize(
  _In_ HANDLE hConsoleOutput,
  _In_ COORD  dwSize
);

Это будет выглядеть так (не проверено):

[DllImport("kernel32.dll")]
private static extern bool SetConsoleScreenBufferSize(int handle, COORD newSize);
...