Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menambah warna tersuai, seperti oren, pada aplikasi konsol C# saya?

Bagaimanakah saya boleh menambah warna tersuai, seperti oren, pada aplikasi konsol C# saya?

DDD
DDDasal
2025-01-03 10:48:40671semak imbas

How can I add custom colors, like orange, to my C# console application?

Warna Tersuai dalam Aplikasi Konsol C#

Dalam aplikasi konsol C#, keupayaan untuk menyesuaikan warna fon melebihi warna konsol lalai ialah ciri yang berharga . Malangnya, senarai warna yang tersedia adalah terhad, tiada warna oren yang diingini.

Pilihan yang Tersedia untuk Warna Tersuai

Manakala senarai warna yang disediakan adalah set rasmi yang disokong oleh konsol, terdapat cara untuk mencapai warna tersuai:

  • Menggunakan Luaran Perpustakaan: Perpustakaan khusus boleh disepadukan untuk memanjangkan keupayaan konsol dan menyediakan palet warna yang lebih luas. Salah satu pustaka tersebut ialah ConsoleTools.
  • PINVOKE Peringkat Rendah: Kaedah ini melibatkan akses terus ke API Windows untuk memanipulasi atribut penimbal konsol. Ia membenarkan lebih banyak kawalan ke atas pengurusan warna tetapi memerlukan pemahaman yang mendalam tentang pengaturcaraan peringkat sistem.

Menukar Warna Konsol Secara Pengaturcaraan

Setelah anda memilih kaedah untuk sokongan warna tersuai, anda boleh melaksanakan perubahan warna dalam C# anda program:

  • Kaedah Perpustakaan Luaran:

    • Pasang perpustakaan ConsoleTools.
    • Buat contoh baharu ColorfulConsole .
    • Tetapkan warna latar belakang dan latar depan menggunakan BackgroundColor dan Sifat ForegroundColor.
  • Kaedah PINVOKE:

    • Dapatkan maklumat penimbal konsol sedia ada menggunakan GetConsoleScreenBufferInfoEx.
    • Ubah suai atribut warna yang dikehendaki warna.
    • Tetapkan maklumat penimbal baharu menggunakan SetConsoleScreenBufferInfoEx.

Pelaksanaan Khusus Menggunakan PINVOKE

Kod yang disediakan coretan menunjukkan cara menggunakan kaedah PINVOKE untuk menetapkan warna tersuai, termasuk oren:

using System;
using System.Drawing;
using System.Runtime.InteropServices;

public class CustomConsoleColors
{
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe);

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

    [StructLayout(LayoutKind.Sequential)]
    private struct SMALL_RECT
    {
        public short Left;
        public short Top;
        public short Right;
        public short Bottom;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct CONSOLE_SCREEN_BUFFER_INFO_EX
    {
        public int cbSize;
        public COORD dwSize;
        public COORD dwCursorPosition;
        public ushort wAttributes;
        public SMALL_RECT srWindow;
        public COORD dwMaximumWindowSize;
        public ushort wPopupAttributes;
        public bool bFullscreenSupported;
        public uint black;
        public uint darkBlue;
        public uint darkGreen;
        public uint darkCyan;
        public uint darkRed;
        public uint darkMagenta;
        public uint darkYellow;
        public uint gray;
        public uint darkGray;
        public uint blue;
        public uint green;
        public uint cyan;
        public uint red;
        public uint magenta;
        public uint yellow;
        public uint white;
    }

    public static void SetColor(ConsoleColor color, Color targetColor)
    {
        CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new CONSOLE_SCREEN_BUFFER_INFO_EX();
        csbe.cbSize = Marshal.SizeOf(csbe);
        IntPtr hConsoleOutput = GetStdHandle(-11);
        if (hConsoleOutput == new IntPtr(-1))
            throw new Exception("Error retrieving console buffer handle");
        if (!GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe))
            throw new Exception("Error retrieving console buffer info");

        switch (color)
        {
            case ConsoleColor.Black:
                csbe.black = ColorTranslator.ToWin32(targetColor);
                break;
            case ConsoleColor.DarkBlue:
                csbe.darkBlue = ColorTranslator.ToWin32(targetColor);
                break;
            // ... (similar code for other colors)
            case ConsoleColor.DarkYellow:
                csbe.darkYellow = ColorTranslator.ToWin32(targetColor);
                break;
            case ConsoleColor.Gray:
                csbe.gray = ColorTranslator.ToWin32(targetColor);
                break;
            // ... (similar code for other colors)
            case ConsoleColor.White:
                csbe.white = ColorTranslator.ToWin32(targetColor);
                break;
        }

        if (!SetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe))
            throw new Exception("Error setting console buffer info");
    }

    public static void Main()
    {
        SetColor(ConsoleColor.DarkYellow, Color.Orange);
        Console.WriteLine("Custom orange color applied!");
        Console.ReadLine();
    }
}

Dengan menggunakan kaedah ini, anda boleh menetapkan sebarang warna yang diingini, termasuk oren, sebagai warna latar depan atau latar belakang konsol, memberikan pengalaman pengguna yang lebih kaya dan boleh disesuaikan dalam aplikasi konsol C# anda.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menambah warna tersuai, seperti oren, pada aplikasi konsol C# saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn