在Console中输出彩色字体(原码)

作者:痕迹

先是consolecolour.cs类,用来调用颜色

// ConsoleColour.cs 
using System;
using System.Runtime.InteropServices;

// need this to make API calls 
using System.Runtime.InteropServices;

namespace PFitzsimons.ConsoleColour
{
    /// <summary> 
    /// Static class for console colour manipulation. 
    /// </summary> 
    public class ConsoleColour
    {
        // constants for console streams 
        const int STD_INPUT_HANDLE = -10;
        const int STD_OUTPUT_HANDLE = -11;
        const int STD_ERROR_HANDLE = -12;

        [DllImportAttribute("Kernel32.dll")]
        private static extern IntPtr GetStdHandle
        (
            int nStdHandle // input, output, or error device 
        );

        [DllImportAttribute("Kernel32.dll")]
        private static extern bool SetConsoleTextAttribute
        (
            IntPtr hConsoleOutput, // handle to screen buffer 
            int wAttributes  // text and background colors 
        );

        // colours that can be set 
        [Flags]
        public enum ForeGroundColour
        {
            Black = 0x0000,
            Blue = 0x0001,
            Green = 0x0002,
            Cyan = 0x0003,
            Red = 0x0004,
            Magenta = 0x0005,
            Yellow = 0x0006,
            Grey = 0x0007,
            White = 0x0008
        }

        // class can not be created, so we can set colours 
        // without a variable 
        private ConsoleColour()
        {
        }

        public static bool SetForeGroundColour()
        {
            // default to a white-grey 
            return SetForeGroundColour(ForeGroundColour.Grey);
        }

        public static bool SetForeGroundColour(ForeGroundColour foreGroundColour)
        {
            // default to a bright white-grey 
            return SetForeGroundColour(foreGroundColour, true);
        }

        public static bool SetForeGroundColour(ForeGroundColour foreGroundColour, bool brightColours)
        {
            // get the current console handle 
            IntPtr nConsole = GetStdHandle(STD_OUTPUT_HANDLE);
            int colourMap;

            // if we want bright colours OR it with white 
            if (brightColours)
                colourMap = (int)foreGroundColour |
                (int)ForeGroundColour.White;
            else
                colourMap = (int)foreGroundColour;

            // call the api and return the result 
            return SetConsoleTextAttribute(nConsole, colourMap);
        }
    }
}

然后是主程序

// Console.cs 
using System;

// we want color output 
using PFitzsimons.ConsoleColour;

namespace MyApp
{
    public class MyApp
    {
        public static void Main()
        {
            ConsoleColour.SetForeGroundColour(
           ConsoleColour.ForeGroundColour.Green);

            Console.WriteLine("Text in green");

            ConsoleColour.SetForeGroundColour(
            ConsoleColour.ForeGroundColour.Red);

            Console.WriteLine("Text in red");

            // reset console back to a default 
            ConsoleColour.SetForeGroundColour(ConsoleColour.ForeGroundColour.Yellow, true);
            //ConsoleColour.SetForeGroundColour(); 
            //ConsoleColour.SetForeGroundColour(ConsoleColour.ForeGroundColour.Yellow,false); 
        }
    }
}

分别存成ConsoleColour.csConsole.cs,然后提示符下编译

CSC /t:library ConsoleColour.cs
CSC /r:ConsoleColour.dll Console.cs

生成console.exe可执行文件
执行后看看效果吧!

Powered by DvNews.net
来源:uncj.net
阅读:181 次
日期:2003-7-1
Contributors: FHL