Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memaparkan Warna Tersuai (Seperti Jingga) dalam Aplikasi Konsol C# Saya?

Bagaimanakah Saya Boleh Memaparkan Warna Tersuai (Seperti Jingga) dalam Aplikasi Konsol C# Saya?

Mary-Kate Olsen
Lepaskan: 2025-01-02 17:25:40
asal
632 orang telah melayarinya

How Can I Display Custom Colors (Like Orange) in My C# Console Application?

Teks Berwarna dalam Aplikasi Konsol

Enum ConsoleColor terbina dalam menyediakan pilihan warna teks yang terhad untuk aplikasi konsol C#. Walau bagaimanapun, mungkin ada kalanya anda menginginkan warna tertentu, seperti oren, itu tidak disertakan.

Penghadan ConsoleColor Enum

Enum ConsoleColor menyenaraikan teks yang disokong warna, iaitu:

Black
DarkBlue
DarkGreen
DarkCyan
DarkRed
DarkMagenta
DarkYellow
Gray
DarkGray
Blue
Green
Cyan
Red
Magenta
Yellow
White
Salin selepas log masuk

Seperti yang anda lihat, oren tidak terdapat dalam set ini warna.

Warna Teks Tersuai melalui P/Invoke

Untuk mencapai warna teks tersuai, kita boleh mendalami bidang Invocation Platform (P/Invoke). Dengan menggunakan fungsi SetConsoleScreenBufferInfoEx() daripada pustaka kernel32.dll, kami boleh memanipulasi terus tetapan warna konsol.

Mula-mula, tentukan struktur data yang diperlukan:

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

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

[StructLayout(LayoutKind.Sequential)]
internal struct COLORREF
{
    public uint ColorDWORD;
    
    public COLORREF(Color color)
    {
        ColorDWORD = (uint) color.R + (((uint) color.G) << 8) + (((uint) color.B) << 16);
    }
}

[StructLayout(LayoutKind.Sequential)]
internal 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;
    ...
}
Salin selepas log masuk

Kemudian, import fungsi yang diperlukan daripada kernel32.dll:

[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr GetStdHandle(int nStdHandle);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool GetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleScreenBufferInfoEx(IntPtr hConsoleOutput, ref CONSOLE_SCREEN_BUFFER_INFO_EX csbe);
Salin selepas log masuk

Menetapkan Warna Tersuai

Dengan alatan ini, kami kini boleh menentukan kaedah untuk menetapkan warna konsol tertentu, termasuk oren:

public static int SetColor(ConsoleColor consoleColor, Color targetColor)
{
    // Fetch console details
    CONSOLE_SCREEN_BUFFER_INFO_EX csbe = new CONSOLE_SCREEN_BUFFER_INFO_EX();
    csbe.cbSize = (int)Marshal.SizeOf(csbe);
    IntPtr hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    bool brc = GetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
    if (!brc)
        return Marshal.GetLastWin32Error();

    // Set the specified color component
    switch (consoleColor)
    {
        case ConsoleColor.Black:
            csbe.black = new COLORREF(targetColor);
            break;
        ...
        // Other colors defined similarly
    }
    
    // Apply the Color
    brc = SetConsoleScreenBufferInfoEx(hConsoleOutput, ref csbe);
    if (!brc)
        return Marshal.GetLastWin32Error();
    
    return 0;
}

public static int SetScreenColors(Color foregroundColor, Color backgroundColor)
{
    int irc = SetColor(ConsoleColor.Gray, foregroundColor);
    if (irc != 0) return irc;
    irc = SetColor(ConsoleColor.Black, backgroundColor);
    return irc;
}
Salin selepas log masuk

Sekarang, mari kita lihat contoh SetScreenColors dalam tindakan:

static void Main(string[] args)
{
    Color screenTextColor = Color.Orange;
    Color screenBackgroundColor = Color.Black;
    SetScreenColors(screenTextColor, screenBackgroundColor);
    
    Console.WriteLine("Hello World!");
    Console.ReadKey();
}
Salin selepas log masuk

Dengan menggunakan kaedah di atas, anda boleh menetapkan latar depan dan warna latar belakang konsol anda kepada sebarang nilai RGB yang dikehendaki, termasuk oren. Nikmati menyesuaikan output konsol anda!

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memaparkan Warna Tersuai (Seperti Jingga) dalam Aplikasi Konsol C# Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan