Bagikan melalui


Buffer Layar Konsol

Buffer layar adalah array dua dimensi data karakter dan warna untuk output di jendela konsol. Konsol dapat memiliki beberapa buffer layar. Buffer layar aktif adalah buffer yang ditampilkan di layar.

Sistem membuat buffer layar setiap kali membuat konsol baru. Untuk membuka handel ke buffer layar aktif konsol, tentukan nilai CONOUT$ dalam panggilan ke fungsi CreateFile . Proses dapat menggunakan fungsi CreateConsoleScreenBuffer untuk membuat buffer layar tambahan untuk konsolnya. Buffer layar baru tidak aktif sampai handelnya ditentukan dalam panggilan ke fungsi SetConsoleActiveScreenBuffer. Namun, buffer layar dapat diakses untuk membaca dan menulis apakah mereka aktif atau tidak aktif.

Setiap buffer layar memiliki array dua dimensi rekaman informasi karakternya sendiri. Data untuk setiap karakter disimpan dalam struktur CHAR_INFO yang menentukan karakter Unicode atau ANSI dan warna latar depan dan latar belakang tempat karakter tersebut ditampilkan.

Sejumlah properti yang terkait dengan buffer layar dapat diatur secara independen untuk setiap buffer layar. Ini berarti bahwa mengubah buffer layar aktif dapat memiliki efek dramatis pada tampilan jendela konsol. Properti yang terkait dengan buffer layar meliputi:

  • Ukuran buffer layar, dalam baris dan kolom karakter.
  • Atribut teks (warna latar depan dan latar belakang untuk menampilkan teks yang akan ditulis oleh fungsi WriteFile atau WriteConsole).
  • Ukuran dan lokasi jendela (wilayah persegi panjang buffer layar konsol yang ditampilkan di jendela konsol).
  • Posisi, tampilan, dan visibilitas kursor.
  • Mode output (ENABLE_PROCESSED_OUTPUT dan ENABLE_WRAP_AT_EOL_OUTPUT). Untuk informasi selengkapnya tentang mode output konsol, lihat Mode Konsol Tingkat Tinggi.

Saat buffer layar dibuat, buffer berisi karakter spasi di setiap posisi. Kursornya terlihat dan diposisikan di asal buffer (0,0), dan jendela diposisikan dengan sudut kiri atasnya di asal buffer. Ukuran buffer layar konsol, ukuran jendela, atribut teks, dan tampilan kursor ditentukan oleh pengguna atau secara default sistem. Untuk mengambil nilai saat ini dari berbagai properti yang terkait dengan buffer layar konsol, gunakan fungsi GetConsoleScreenBufferInfo, GetConsoleCursorInfo, dan GetConsoleMode.

Aplikasi yang mengubah salah satu properti buffer layar konsol harus membuat buffer layar mereka sendiri atau menyimpan status buffer layar yang diwariskan selama startup dan memulihkannya saat keluar. Perilaku kooperatif ini diperlukan untuk memastikan bahwa aplikasi lain yang berbagi sesi konsol yang sama tidak terpengaruh oleh perubahan.

Tip

Disarankan untuk menggunakan mode buffer alternatif ke depannya, jika memungkinkan, alih-alih membuat buffer layar kedua untuk tujuan ini. Mode buffer alternatif menawarkan peningkatan kompatibilitas di seluruh perangkat jarak jauh dan dengan platform lain. Silakan lihat diskusi kami tentang API konsol klasik versus terminal virtual untuk informasi selengkapnya.

Tampilan dan Posisi Kursor

Kursor penyangga layar dapat terlihat atau disembunyikan. Ketika terlihat, tampilannya dapat bervariasi, mulai dari mengisi sel karakter sepenuhnya hingga muncul sebagai garis horizontal di bagian bawah sel. Untuk mengambil informasi tentang tampilan dan visibilitas kursor, gunakan fungsi GetConsoleCursorInfo. Fungsi ini melaporkan apakah kursor terlihat dan menjelaskan tampilan kursor sebagai persentase sel karakter yang diisinya. Untuk mengatur tampilan dan visibilitas kursor, gunakan fungsi SetConsoleCursorInfo.

Karakter yang ditulis oleh fungsi I/O konsol tingkat tinggi ditulis di lokasi kursor saat ini, memajukan kursor ke lokasi berikutnya. Untuk menentukan posisi kursor saat ini dalam sistem koordinat buffer layar, gunakan GetConsoleScreenBufferInfo. Anda dapat menggunakan SetConsoleCursorPosition untuk mengatur posisi kursor dan, dengan demikian, mengontrol penempatan teks yang ditulis atau digaungkan oleh fungsi I/O tingkat tinggi. Jika Anda memindahkan kursor, teks di lokasi kursor baru akan ditimpa.

Catatan

Menggunakan fungsi tingkat rendah untuk menemukan posisi kursor tidak disarankan. Disarankan untuk menggunakan urutan terminal virtual untuk mengkueri posisi ini jika perlu untuk tata letak tingkat lanjut. Informasi selengkapnya tentang memilih urutan terminal virtual dapat ditemukan di fungsi klasik versus dokumen terminal virtual.

Posisi, tampilan, dan visibilitas kursor diatur secara independen untuk setiap buffer layar.

Atribut Karakter

Atribut karakter dapat dibagi menjadi dua kelas: warna dan DBCS. Atribut berikut didefinisikan dalam WinCon.h file header.

Atribut Makna
FOREGROUND_BLUE Warna teks berisi biru.
FOREGROUND_GREEN Warna teks berisi hijau.
FOREGROUND_RED Warna teks berisi merah.
FOREGROUND_INTENSITY Warna teks diintensifkan.
BACKGROUND_BLUE Warna latar belakang berisi biru.
BACKGROUND_GREEN Warna latar belakang berisi hijau.
BACKGROUND_RED Warna latar belakang berisi merah.
BACKGROUND_INTENSITY Warna latar belakang diintensifkan.
COMMON_LVB_LEADING_BYTE Byte terdepan.
COMMON_LVB_TRAILING_BYTE Byte berikutnya.
COMMON_LVB_GRID_HORIZONTAL Horizontal atas.
COMMON_LVB_GRID_LVERTICAL Vertikal kiri.
COMMON_LVB_GRID_RVERTICAL Vertikal kanan.
COMMON_LVB_REVERSE_VIDEO Atribut latar depan terbalik dan latar belakang.
COMMON_LVB_UNDERSCORE Menekankan.

Atribut latar depan menentukan warna teks. Atribut latar belakang menentukan warna yang digunakan untuk mengisi latar belakang sel. Atribut lainnya digunakan dengan DBCS.

Aplikasi dapat menggabungkan konstanta latar depan dan latar belakang untuk mencapai warna yang berbeda. Misalnya, kombinasi berikut menghasilkan teks sian cerah pada latar belakang biru.

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

Jika tidak ada konstanta latar belakang yang ditentukan, latar belakang berwarna hitam, dan jika tidak ada konstanta latar depan yang ditentukan, teks berwarna hitam. Misalnya, kombinasi berikut menghasilkan teks hitam pada latar belakang putih. Merah, hijau, dan biru ditentukan untuk latar belakang yang menggabungkan ke latar belakang putih. Tidak ada warna bendera yang ditentukan untuk latar depan sehingga berwarna hitam.

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

Setiap sel karakter buffer layar menyimpan atribut warna untuk warna yang digunakan dalam menggambar latar depan (teks) dan latar belakang sel tersebut. Aplikasi dapat mengatur data warna untuk setiap sel karakter satu per satu, menyimpan data di anggota Atribut dari struktur CHAR_INFO untuk setiap sel. Atribut teks saat ini dari setiap buffer layar digunakan untuk karakter yang kemudian ditulis atau digaungkan oleh fungsi tingkat tinggi.

Aplikasi dapat menggunakan GetConsoleScreenBufferInfo untuk menentukan atribut teks buffer layar saat ini dan fungsi SetConsoleTextAttribute untuk mengatur atribut karakter. Mengubah atribut buffer layar tidak memengaruhi tampilan karakter yang ditulis sebelumnya. Atribut teks ini tidak memengaruhi karakter yang ditulis oleh fungsi I/O konsol tingkat rendah (seperti fungsi WriteConsoleOutput atau WriteConsoleOutputCharacter), yang secara eksplisit menentukan atribut untuk setiap sel yang ditulis atau membiarkan atribut tidak berubah.

Catatan

Menggunakan fungsi tingkat rendah untuk memanipulasi atribut teks default dan tertentu tidak disarankan. Disarankan untuk menggunakan urutan terminal virtual untuk mengatur atribut teks. Informasi selengkapnya tentang memilih urutan terminal virtual dapat ditemukan di fungsi klasik versus dokumen terminal virtual.

Atribut Font

Fungsi GetCurrentConsoleFont mengambil informasi tentang font konsol saat ini. Informasi yang disimpan dalam struktur CONSOLE_FONT_INFO mencakup lebar dan tinggi setiap karakter dalam font.

Fungsi GetConsoleFontSize mengambil ukuran font yang digunakan oleh buffer layar konsol yang ditentukan.

Catatan

Menggunakan fungsi untuk menemukan dan memanipulasi informasi font tidak disarankan. Disarankan untuk mengoperasikan aplikasi baris perintah dengan cara netral font untuk memastikan kompatibilitas lintas platform serta kompatibilitas dengan lingkungan host yang memungkinkan pengguna untuk menyesuaikan font. Informasi selengkapnya preferensi pengguna dan lingkungan host termasuk terminal, silakan lihat peta jalan ekosistem.