2008-10-13 30 views

Trả lời

23

Console.SetCursorPosition, Console.BackgroundColor, Console.ForegroundColor và Console.ResetColor.

Lưu ý rằng chúng đã được thêm vào Khuôn khổ .NET trong phiên bản 2.0. Trước đó bạn sẽ cần PInvoke.

6

Theo Mono Library List có ít nhất hai thư viện mà có thể hữu ích cho bạn:

  • Curses# sử dụng PDCurses trên Windows và trên Linux kernel. Nó gần như crossplatform trên một mức độ nhị phân.

  • MonoCurses là một liên kết được cấp phép MIT-X11, và nó bao gồm bộ công cụ GUI tối ưu gui.cs để tạo ứng dụng dựa trên bảng điều khiển.

4

This posting cho thấy làm thế nào để sử dụng phương pháp lớp Console để tạo ra một thanh tiến trình trên console - nó có thể là một ví dụ tốt để tham khảo ....

2

chức năng hiệu quả nhất là WriteConsoleOutput. Nó có nguồn gốc win32 API, nhưng có thể được sử dụng trong ứng dụng .NET sử dụng p/gọi:

[DllImport("kernel32.dll", SetLastError = true, EntryPoint = "WriteConsoleOutputW")] 
public static extern bool WriteConsoleOutput(IntPtr hConsoleOutput, CHAR_INFO[,] lpBuffer, COORD dwBufferSize, 
               COORD dwBufferCoord, ref SMALL_RECT lpWriteRegion); 

đâu CHAR_INFO là một cấu trúc: cấu trúc

/// <summary> 
/// CharSet.Unicode is required for proper marshaling. 
/// </summary> 
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)] 
public struct CHAR_INFO 
{ 
    [FieldOffset(0)] 
    public char UnicodeChar; 
    [FieldOffset(0)] 
    public char AsciiChar; 
    [FieldOffset(2)] //2 bytes seems to work properly 
    public Attr Attributes; 

    public override string ToString() { 
     return string.Format("CHAR_INFO : '{0}' ({1})", AsciiChar, Attributes); 
    } 
} 

attr:

/// <summary> 
/// CHAR_ATTRIBUTES native structure. 
/// </summary> 
[Flags] 
public enum Attr : ushort { 
    NO_ATTRIBUTES = 0x0000, 
    /// <summary> 
    /// Text color contains blue. 
    /// </summary> 
    FOREGROUND_BLUE = 0x0001, 
    /// <summary> 
    /// Text color contains green. 
    /// </summary> 
    FOREGROUND_GREEN = 0x0002, 
    /// <summary> 
    /// Text color contains red. 
    /// </summary> 
    FOREGROUND_RED = 0x0004, 
    /// <summary> 
    /// Text color is intensified. 
    /// </summary> 
    FOREGROUND_INTENSITY = 0x0008, 
    /// <summary> 
    /// Background color contains blue. 
    /// </summary> 
    BACKGROUND_BLUE = 0x0010, 
    /// <summary> 
    /// Background color contains green. 
    /// </summary> 
    BACKGROUND_GREEN = 0x0020, 
    /// <summary> 
    /// Background color contains red. 
    /// </summary> 
    BACKGROUND_RED = 0x0040, 
    /// <summary> 
    /// Background color is intensified. 
    /// </summary> 
    BACKGROUND_INTENSITY = 0x0080, 
    /// <summary> 
    /// Leading byte. 
    /// </summary> 
    COMMON_LVB_LEADING_BYTE = 0x0100, 
    /// <summary> 
    /// Trailing byte. 
    /// </summary> 
    COMMON_LVB_TRAILING_BYTE = 0x0200, 
    /// <summary> 
    /// Top horizontal 
    /// </summary> 
    COMMON_LVB_GRID_HORIZONTAL = 0x0400, 
    /// <summary> 
    /// Left vertical. 
    /// </summary> 
    COMMON_LVB_GRID_LVERTICAL = 0x0800, 
    /// <summary> 
    /// Right vertical. 
    /// </summary> 
    COMMON_LVB_GRID_RVERTICAL = 0x1000, 
    /// <summary> 
    /// Reverse foreground and background attribute. 
    /// </summary> 
    COMMON_LVB_REVERSE_VIDEO = 0x4000, 
    /// <summary> 
    /// Underscore. 
    /// </summary> 
    COMMON_LVB_UNDERSCORE = 0x8000 
} 

COORD và SMALL_RECT:

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

    public COORD(short X, short Y) 
    { 
     this.X = X; 
     this.Y = Y; 
    } 
}; 

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

    public SMALL_RECT(short left, short top, short right, short bottom) { 
     Left = left; 
     Top = top; 
     Right = right; 
     Bottom = bottom; 
    } 
} 
Các vấn đề liên quan