2011-03-21 34 views
0

我正在为学校项目创建ASCII接口,但我遇到了一些问题。C#:在用户修改后重置控制台颜色托盘

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,所以我没有代表:)

回答

3

这一切都非常设计。控制台应用程序只能显示16种不同的颜色。快捷键属性允许用户自定义这些颜色,就像控制面板中的“显示”小程序允许她更改GUI应用程序的Windows主题颜色一样。覆盖用户的偏好几乎从来都不是错误。

但是你可以在Vista和Win7上使用SetConsoleScreenBufferEx()API函数。样板代码(C)在this thread,请访问pinvoke.net获取您需要的声明。

+1

PInvoke eh?好的!新玩具! 我没想到你几乎不想重写用户的偏好,但在这种情况下,我正在像ASCII天的游戏一样工作,并且让一组可靠的颜色更合理能够合作。只是为了让设计人员能够在多台计算机上提供一致的体验。 (这确实让我想,也许我应该有一个选项来启用/禁用覆盖某处) 我会upvote这个,但唉,我只是一个noob。非常感谢 :) – 2011-03-25 04:41:32