C#:在用户修改后重置控制台调色板

时间:2011-03-21 15:24:24

标签: c# colors ascii console-application

我正在为学校项目创建一个ASCII接口,但我遇到了一些问题。

Output & properties window for CMD |Screenshot|

我最初修改颜色对眼睛来说更容易,并且更美观,因为我倾向于使用那个'cmd.exe',但看起来它又回来了我。柔软的深蓝色带金丝雀黄色文字,看起来还不错。显然,Console.ConsoleColor从我在cmd.exe属性窗口中修改的颜色中获取其所有颜色。不好!我不明白为什么这两者是分开的:/

那里的任何人都知道如何覆盖这个托盘?我希望有一些东西可以让我在代码中设置RGB,但是如果有办法访问System.Drawing.Color托盘那将是kickass!

我在这里编程很新,所以我非常感谢一个解释得很好的答案,但我并不挑剔:P

以下是创建上述输出的代码:

//show a title
        Console.Title = "Contact Book";

        //set up the console window all nice like   
        Console.SetWindowSize(80, 50);

        Console.SetBufferSize(80, 50);

        //my attempt to reset the colors :( does not work
        Console.ResetColor();

        Console.BackgroundColor = ConsoleColor.Black;

        Console.ForegroundColor = ConsoleColor.White;

        Console.Clear();

        //write some stuff... :/
        Console.WriteLine("{0} {1}", Console.LargestWindowWidth, Console.LargestWindowHeight);

        Console.WriteLine("11111111112222222222333333333344444444445555555555666666666667777777777888888888889999999999900000000000");

        for (int i = 2; i != 10; i++)
        {
            Console.WriteLine("{0}", i);
        }

PS:会嵌入图像,但这是我第一次在stackoverflow.com上,所以我没有代表:)

1 个答案:

答案 0 :(得分:3)

这完全是设计上的。控制台应用程序只能显示16种不同的颜色。快捷方式属性允许用户自定义这些颜色,就像控制面板中的显示小程序允许她更改GUI应用程序的Windows主题颜色一样。覆盖用户的偏好几乎不是一个错误。

但是你可以通过设置SetConsoleScreenBufferEx()API函数在Vista和Win7上运行。 Boilerplate代码(在C中)位于this thread,访问pinvoke.net以获取您需要的声明。