Sabtu, 23 Mei 2015

Ubah Warna Teks Console dalam Program C dengan Windows API


Saat membuat program berbasis teks (console application), biasanya secara default background berwarna hitam dan teksnya berwarna putih agak keabu-abuan. Walaupun demikian, kita bisa mengubah pengaturan default ini jika kita mau. Di sistem operasi berbasis Unix, ini bisa dilakukan dengan library ncurses. Namun, menurut saya metode ini kurang efektif, karena pada umumnya program konsol sudah jarang dipakai dan skala programnya rata-rata kecil. Cara lainnya adalah dengan ANSI escape code. Cara ini lebih efektif, namun tidak didukung oleh Windows.

Sementara itu, di Windows, kita juga bisa menggunakan ncurses, namun akan lebih efektif jika kita memanfaatkan Windows API yang dapat dengan mudah kita gunakan.

Pada tulisan ini kita akan coba mengubah warna atribut teks di Windows dengan Windows API. Fungsi API yang harus kita ketahui untuk mengubah atribut teks ada 2, yaitu GetStdHandle() untuk memperoleh handle output konsol yang selanjutnya kita pakai untuk merubah atribut teks, fungsi kedua adalah SetConsoleTextAttribute(), digunakan untuk menguah atribut teks dalam konsol.
Prototype fungsinya adalah sebagai berikut:


HANDLE GetStdHandle(DWORD nStdHandle);
nStdHandle: Jenis handle yang ingin kita peroleh. Bisa berupa STD_INPUT_HANDLE, STD_OUTPUT_HANDLE atau STD_ERROR_HANDLE.
Return: Handle



BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
hConsoleOutput: Handle yang diperoleh dari GetStdHandle dengan jenis STD_OUTPUT_HANDLE.
wAttributes: Atribut warna baru. Argumen yang diberikan bisa erupakan kombinasi dari konstanta berikut; FOREGROUND_RED, FOREGROUND_GREEN, FOREGROUND_BLUE, FOREGROUND_INTENSITY, BACKGROUND_RED, BACKGROUND_GREEN, BACKGROUND_BLUE, BACKGROUND_INTENSITY.
Return: TRUE jika berhasil

Contoh

#include <stdio.h>
#include <windows.h>

int main() {
    HANDLE hConsole;
    /* Get standard output handle */
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    /*Set console text attribute */
    SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
    printf("Wow, keren...\n");
    SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
    printf("Wow, keren...\n");
    SetConsoleTextAttribute(hConsole, FOREGROUND_RED | BACKGROUND_BLUE);
    printf("Wow, keren...\n");

    return 0;
}


Hasil

Load disqus comments

0 comments