控制檯也可以豐富多彩

很多不要求UI的軟件,我們都理所當然地想到將它開發成控制檯程序。但是這樣黑底白字的程序寫多了,不但用戶看得膩味,連開發人自己都覺得單調沒趣了。嗯,你有沒有考慮過寫一個花花綠綠的控制檯程序,給人煥然一新的感覺呢?來,跟着涕淌DIY一個:

Imports System
Imports System.Runtime.InteropServices

Module ModuleConsoleColors

    Sub Main()

        '定義一個變量來獲得句柄
        Dim hOut As IntPtr
        '-11專門用於輸出設備
        hOut = GetStdHandle(-11)

        '現在開始展示不同的文本設置啦!
        SetConsoleTextAttribute(hOut, TextAttributes.BACKGROUND_INTENSITY)
        Console.WriteLine("歡迎常來訪問涕淌居:http://blog.csdn.net/gnudoyng :)")
        '注意,這條語句我傳入的參數值是兩個枚舉值的和,因此它們的效果疊加了
        SetConsoleTextAttribute(hOut, &H9)
        Console.WriteLine("你一定能在涕淌居找到你喜歡的東西——I promise...")
        SetConsoleTextAttribute(hOut, TextAttributes.BACKGROUND_GREEN)
        Console.WriteLine("經常盯着電腦會損傷視力,所以請你多看看綠色的東西。")
        SetConsoleTextAttribute(hOut, TextAttributes.FOREGROUND_RED)
        Console.WriteLine("我再一次負責任地告訴你——There is NOTHING Visual Basic can't do!")
        SetConsoleTextAttribute(hOut, TextAttributes.BACKGROUND_BLUE)
        Console.WriteLine("我出生在中國東南的海邊,所以我永遠最喜歡藍色...")

        '按任意鍵退出
        Console.Read()

    End Sub

    '聲明SetConsoleTextAttribute函數
    Declare Function SetConsoleTextAttribute Lib "kernel32.dll" ( _
        ByVal hConsoleOutput As IntPtr, ByVal wAttributes As TextAttributes) As Boolean

    '聲明GetStdHandle函數,以此來獲取在SetConsoleTextAttribute函數中使用的句柄
    Declare Function GetStdHandle Lib "kernel32.dll" (ByVal nStdHandle As Integer) As IntPtr

    '文本樣式的枚舉,涕淌這裏只是列出了幾個最基本的
    '通過不同枚舉值的疊加,你可以得到綜合的樣式
    '自己動手試試吧,哦對了,三原色的疊加原理你應該很清楚吧哈哈?

    Public Enum TextAttributes

        FOREGROUND_BLUE = &H1
        FOREGROUND_GREEN = &H2
        FOREGROUND_RED = &H4
        FOREGROUND_INTENSITY = &H8
        BACKGROUND_BLUE = &H10
        BACKGROUND_GREEN = &H20
        BACKGROUND_RED = &H40
        BACKGROUND_INTENSITY = &H80
        COMMON_LVB_LEADING_BYTE = &H100
        COMMON_LVB_TRAILING_BYTE = &H200
        COMMON_LVB_GRID_HORIZONTAL = &H400
        COMMON_LVB_GRID_LVERTICAL = &H800
        COMMON_LVB_GRID_RVERTICAL = &H1000
        COMMON_LVB_REVERSE_VIDEO = &H4000
        COMMON_LVB_UNDERSCORE = &H8000

    End Enum

End Module

呵呵,就是調用了兩個API函數——原理其實很簡單是吧!smile.gif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章