删除C#中控制台滚动条后的剩余空间

问题描述 投票:-5回答:1

我正在Visual Studio中使用C#制作控制台游戏,并且希望使该游戏在完整的控制台窗口中。

我将缓冲区和窗口的大小调整为相同的大小,但是看起来好像保留了滚动条之后的空间,这看起来可能很烦人。我想知道是否有任何方法可以删除C#中的空白,或者至少添加灰色的滚动条。我看到了类似的线程,但是它是在C ++中。

Scrollbars

这是可复制的示例:

using Microsoft.Win32.SafeHandles;
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace ConsoleTest1
{
    class Program
    {
        [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern SafeFileHandle CreateFile(
            string fileName,
            [MarshalAs(UnmanagedType.U4)] uint fileAccess,
            [MarshalAs(UnmanagedType.U4)] uint fileShare,
            IntPtr securityAttributes,
            [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
            [MarshalAs(UnmanagedType.U4)] int flags,
            IntPtr template);

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool WriteConsoleOutput(
          SafeFileHandle hConsoleOutput,
          CharInfo[] lpBuffer,
          Coord dwBufferSize,
          Coord dwBufferCoord,
          ref SmallRect lpWriteRegion);

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

            public Coord(short x, short y)
            {
                X = x;
                Y = y;
            }
        }

        [StructLayout(LayoutKind.Explicit)]
        public struct CharUnion
        {
            [FieldOffset(0)] public char UnicodeChar;
            [FieldOffset(0)] public byte AsciiChar;
        }

        [StructLayout(LayoutKind.Explicit)]
        public struct CharInfo
        {
            [FieldOffset(0)] public CharUnion Char;
            [FieldOffset(2)] public short Attributes;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct SmallRect
        {
            public short Left, Top, Right, Bottom;

            public SmallRect(short width, short height)
            {
                Left = Top = 0;
                Right = width;
                Bottom = height;
            }
        }


        [STAThread]
        static void Main(string[] args)
        {
            short width = 50, height = 20;
            SafeFileHandle handle = CreateFile("CONOUT$", 0x40000000, 2, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero);
            CharInfo[] buffer = new CharInfo[width * height];
            SmallRect writeRegion = new SmallRect(width, height);

            Console.SetWindowSize(width, height);
            Console.SetBufferSize(width, height);

            for (int i = 0; i < buffer.Length; ++i)
            {
                buffer[i].Attributes = 0xb0;
                buffer[i].Char.UnicodeChar = ' ';
            }

            WriteConsoleOutput(handle, buffer, new Coord(width, height), new Coord(0, 0), ref writeRegion);
            Console.ReadKey();
        }
    }
}

我真的不知道该怎么做,即使有可能用这种语言删除黑色空间。

c# .net console-application scrollbar windows-console
1个回答
0
投票

最后,经过大量的努力,我想我已经解决了这个问题。首先,我必须添加一些其他WinAPI方法:

© www.soinside.com 2019 - 2024. All rights reserved.