TN031: Bilah Kontrol
Catatan
Catatan teknis berikut belum diperbarui sejak pertama kali disertakan dalam dokumentasi online. Akibatnya, beberapa prosedur dan topik mungkin kedaluarsa atau salah. Untuk informasi terbaru, disarankan agar Anda mencari topik yang menarik dalam indeks dokumentasi online.
Catatan ini menjelaskan kelas bilah kontrol di MFC: CControlBar umum, CStatusBar, CToolBar, CDialogBar, dan CDockBar
.
CControlBar
A ControlBar
adalah CWnd
kelas turunan yang:
Diratakan ke bagian atas atau bawah jendela bingkai.
Mungkin berisi item anak yang merupakan kontrol berbasis HWND (misalnya,
CDialogBar
) atau item non-berbasisHWND
(misalnya,CToolBar
,CStatusBar
).
Bilah kontrol mendukung gaya tambahan:
CBRS_TOP (Default) sematkan bilah kontrol ke bagian atas.
CBRS_BOTTOM Sematkan bilah kontrol ke bagian bawah.
CBRS_NOALIGN Jangan memposisikan ulang bilah kontrol saat induk mengubah ukuran.
Kelas yang berasal dari CControlBar
memberikan implementasi yang lebih menarik:
CStatusBar
Bilah status, item adalah panel bilah status yang berisi teks.CToolBar
Bilah alat, item adalah tombol bitmap yang diratakan dalam baris.CDialogBar
Bingkai seperti toolbar yang berisi kontrol windows standar (dibuat dari sumber daya templat dialog).CDockBar
Area docking umum untuk objek turunan lainnyaCControlBar
. Fungsi dan variabel anggota tertentu yang tersedia di kelas ini kemungkinan akan berubah dalam rilis mendatang.
Semua objek/jendela bilah kontrol akan menjadi jendela anak dari beberapa jendela bingkai induk. Mereka biasanya ditambahkan sebagai saudara kandung ke area klien bingkai (misalnya, Klien atau tampilan MDI). ID jendela anak dari bilah kontrol penting. Tata letak default bilah kontrol hanya berfungsi untuk bilah kontrol dengan ID dalam rentang AFX_IDW_CONTROLBAR_FIRST hingga AFX_IDW_CONTROLBAR_LAST. Perhatikan bahwa meskipun ada kisaran 256 ID bilah kontrol, 32 ID bilah kontrol pertama ini istimewa karena didukung langsung oleh arsitektur pratinjau cetak.
Kelas ini CControlBar
memberikan implementasi standar untuk:
Menyelaraskan bilah kontrol ke bagian atas, bawah, atau kedua sisi bingkai.
Mengalokasikan array item kontrol.
Mendukung implementasi kelas turunan.
Objek bilah kontrol C++ biasanya akan disematkan sebagai anggota kelas turunan CFrameWnd
, dan akan dibersihkan ketika induk HWND
dan objek dihancurkan. Jika Anda perlu mengalokasikan objek bilah kontrol pada timbunan, Anda cukup mengatur anggota m_bAutoDestruct ke TRUE untuk membuat bilah kontrol dipanggil delete this;
saat HWND
dihancurkan.
Catatan
Jika Anda membuat kelas turunan Anda sendiri CControlBar
, daripada menggunakan salah satu kelas turunan MFC, seperti CStatusBar
, , CToolBar
atau CDialogBar
, Anda harus mengatur anggota data m_dwStyle . Hal ini dapat dilakukan dalam penimpaan :Create
// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create(CWnd* pParentWnd,
DWORD dwStyle,
UINT nID)
{
m_dwStyle = dwStyle;
.
.
.
}
Algoritma Tata Letak Bilah Kontrol
Algoritma tata letak bilah kontrol sangat sederhana. Jendela bingkai mengirim pesan WM_SIZEPARENT ke semua turunan dalam rentang bilah kontrol. Bersama dengan pesan ini, penunjuk ke persegi panjang klien induk diteruskan. Pesan ini dikirim ke anak-anak dalam urutan Z. Anak-anak bilah kontrol menggunakan informasi ini untuk memposisikan diri mereka sendiri dan untuk mengurangi ukuran area klien induk. Persegi panjang akhir yang dibiarkan untuk area klien normal (bilah kontrol kurang) digunakan untuk memosisikan jendela klien utama (biasanya klien MDI, tampilan, atau jendela pemisah).
Lihat CWnd::RepositionBars
dan CFrameWnd::RecalcLayout
untuk detail selengkapnya.
Pesan Windows privat MFC, termasuk WM_SIZEPARENT, didokumenkan dalam Catatan Teknis 24.
CStatusBar
Bilah status adalah bilah kontrol yang memiliki baris panel output teks. Ada dua cara umum untuk menggunakan panel output teks:
Sebagai baris pesan
(misalnya, menu standar membantu baris pesan). Ini biasanya diakses oleh berbasis 0 yang diindeks
Sebagai indikator status
(misalnya, indikator CAP, NUM, dan SCRL). Ini biasanya diakses oleh string/ID perintah.
Font untuk bilah status adalah MS Sans Serif 10 poin (ditentukan oleh Panduan Desain Aplikasi Antarmuka Windows atau pemeta font paling cocok dengan font proporsional Swiss 10 titik). Pada versi Windows tertentu, seperti edisi Jepang, font yang dipilih berbeda.
Warna yang digunakan di bilah status juga konsisten dengan rekomendasi Panduan Desain Aplikasi Antarmuka Windows. Warna-warna ini tidak dikodekan secara permanen dan diubah secara dinamis sebagai respons terhadap penyesuaian pengguna dalam Panel Kontrol.
Item | Nilai WINDOWS COLOR | Default RGB |
---|---|---|
Latar belakang bilah status | COLOR_BTNFACE | RGB(192, 192, 192) |
Teks bilah status | COLOR_BTNTEXT | RGB(000, 000, 000) |
Tepi atas/kiri bilah status | COLOR_BTNHIGHLIGHT | RGB(255, 255, 255) |
Tepi bot/kanan bilah status | COLOR_BTNSHADOW | RGB(128, 128, 128) |
Dukungan CCmdUI untuk CStatusBar
Cara indikator biasanya diperbarui adalah melalui mekanisme ON_UPDATE_COMMAND_UI. Pada waktu diam, bilah status akan memanggil handler ON_UPDATE_COMMAND_UI dengan ID string panel indikator.
Handler ON_UPDATE_COMMAND_UI dapat memanggil:
Enable
: Untuk mengaktifkan atau menonaktifkan panel. Panel yang dinonaktifkan terlihat persis seperti panel yang diaktifkan tetapi teks tidak terlihat (yaitu, menonaktifkan indikator teks).SetText
: Untuk mengubah teks. Berhati-hatilah jika Anda menggunakan ini karena panel tidak akan mengubah ukuran secara otomatis.
Lihat kelas CStatusBar di Referensi Pustaka Kelas untuk detail tentang CStatusBar
API pembuatan dan penyesuaian. Sebagian besar penyesuaian bilah status harus dilakukan sebelum bilah status awalnya dibuat terlihat.
Bilah status hanya mendukung satu panel stretchy, biasanya panel pertama. Ukuran panel tersebut benar-benar ukuran minimum. Jika bilah status lebih besar dari ukuran minimum semua panel, lebar tambahan apa pun akan diberikan ke panel peregangan. Aplikasi default dengan bilah status memiliki indikator rata kanan untuk CAP, NUM, dan SCRL karena panel pertama meregang.
CToolBar
Bilah alat adalah bilah kontrol dengan baris tombol bitmap yang mungkin menyertakan pemisah. Dua gaya tombol didukung: tombol tekan dan tombol kotak centang. Fungsionalitas grup radio dapat dibangun dengan tombol kotak centang dan ON_UPDATE_COMMAND_UI.
Semua tombol bitmap di toolbar diambil dari satu bitmap. Bitmap ini harus berisi satu gambar atau glyph untuk setiap tombol. Biasanya urutan gambar/glyph dalam bitmap adalah urutan yang sama dengan yang akan digambar di layar. (Ini dapat diubah menggunakan API kustomisasi.)
Setiap tombol harus berukuran sama. Defaultnya adalah 24x22 piksel standar. Setiap gambar/glyph harus berukuran sama dan harus berdampingan dalam bitmap. Ukuran gambar/glyph default adalah 16x15 piksel. Oleh karena itu, untuk toolbar dengan 10 tombol (menggunakan ukuran standar), Anda memerlukan bitmap dengan lebar 160 piksel dan tinggi 15 piksel.
Setiap tombol memiliki satu dan hanya satu gambar/glyph. Status dan gaya tombol yang berbeda (misalnya, ditekan, atas, bawah, dinonaktifkan, dinonaktifkan ke bawah, tidak ditentukan) dihasilkan secara algoritma dari satu gambar/glyph tersebut. Bitmap warna atau DIB apa pun dapat digunakan dalam teori. Algoritma untuk menghasilkan status tombol yang berbeda berfungsi paling baik jika gambar asli berwarna abu-abu. Lihat tombol toolbar standar dan clipart tombol toolbar yang disediakan dalam MFC General sample CLIPART misalnya.
Warna yang digunakan dalam toolbar juga konsisten dengan rekomendasi Panduan Desain Aplikasi Antarmuka Windows. Warna-warna ini tidak dikodekan secara permanen dan diubah secara dinamis sebagai respons terhadap penyesuaian pengguna dalam Panel Kontrol.
Item | Nilai WINDOWS COLOR | Default RGB |
---|---|---|
Latar belakang ToolBar | COLOR_BTNFACE | RGB(192.192.192) |
Tombol ToolBar tepi atas/kiri | COLOR_BTNHIGHLIGHT | RGB(255.255.255) |
Tombol ToolBar tepi bot/kanan | COLOR_BTNSHADOW | RGB(128.128.128) |
Selain itu, tombol bitmap toolbar diwarnai ulang seolah-olah tombol ini merupakan kontrol tombol Windows standar. Pewarnaan ulang ini terjadi ketika bitmap dimuat dari sumber daya dan sebagai respons terhadap perubahan warna sistem sebagai respons terhadap kustomisasi pengguna di Panel Kontrol. Warna berikut dalam bitmap toolbar akan diwarnai ulang secara otomatis sehingga harus digunakan dengan hati-hati. Jika Anda tidak ingin sebagian bitmap Anda diwarnai ulang, gunakan warna yang memperkirakan lebih dekat salah satu nilai RGB yang dipetakan. Pemetaan dilakukan berdasarkan nilai RGB yang tepat.
Nilai RGB | Nilai COLOR yang dipetakan secara dinamis |
---|---|
RGB(000, 000, 000) | COLOR_BTNTEXT |
RGB(128, 128, 128) | COLOR_BTNSHADOW |
RGB(192, 192, 192) | COLOR_BTNFACE |
RGB(255, 255, 255) | COLOR_BTNHIGHLIGHT |
Lihat kelas CToolBar Referensi Pustaka Kelas untuk detail tentang CToolBar
API pembuatan dan penyesuaian. Sebagian besar penyesuaian toolbar harus dilakukan sebelum toolbar awalnya dibuat terlihat.
API kustomisasi dapat digunakan untuk menyesuaikan ID tombol, gaya, lebar spacer, dan gambar/glyph mana yang digunakan untuk tombol apa. Secara default, Anda tidak perlu menggunakan API ini.
Dukungan CCmdUI untuk CToolBar
Cara tombol toolbar selalu diperbarui adalah melalui mekanisme ON_UPDATE_COMMAND_UI. Pada waktu diam, toolbar akan memanggil handler ON_UPDATE_COMMAND_UI dengan ID perintah tombol tersebut. ON_UPDATE_COMMAND_UI tidak dipanggil untuk pemisah, tetapi dipanggil untuk tombol tombol pushbutton dan kotak centang.
Handler ON_UPDATE_COMMAND_UI dapat memanggil:
Enable
: Untuk mengaktifkan atau menonaktifkan tombol. Ini berfungsi sama untuk tombol pushbutton dan kotak centang.SetCheck
: Untuk mengatur status pemeriksaan tombol. Memanggil ini untuk tombol toolbar akan mengubahnya menjadi tombol kotak centang.SetCheck
mengambil parameter yang bisa 0 (tidak diperiksa), 1 (diperiksa) atau 2 (tidak ditentukan)SetRadio
: Singkatan untukSetCheck
.
Tombol kotak centang adalah tombol kotak centang "OTOMATIS"; artinya, ketika pengguna menekan mereka, mereka akan segera mengubah status. Diperiksa adalah status tidak berfungsi atau tertekan. Tidak ada cara antarmuka pengguna bawaan untuk mengubah tombol menjadi status "tidak ditentukan"; yang harus dilakukan melalui kode.
API kustomisasi akan memungkinkan Anda mengubah status tombol toolbar tertentu, sebaiknya Anda mengubah status ini di handler ON_UPDATE_COMMAND_UI untuk perintah yang diwakili tombol toolbar. Ingat, pemrosesan diam akan mengubah status tombol toolbar dengan handler ON_UPDATE_COMMAND_UI, sehingga setiap perubahan pada status yang dibuat melalui SetButtonStyle mungkin hilang setelah diam berikutnya.
Tombol toolbar akan mengirim pesan WM_COMMAND seperti tombol normal atau item menu dan biasanya ditangani oleh handler ON_COMMAND di kelas yang sama yang menyediakan handler ON_UPDATE_COMMAND_UI.
Ada empat gaya tombol Toolbar (nilai TBBS_) yang digunakan untuk status tampilan:
TBBS_CHECKED: Kotak centang saat ini dicentang (tidak berfungsi).
TBBS_INDETERMINATE: Kotak centang saat ini tidak ditentukan.
TBBS_DISABLED: Tombol saat ini dinonaktifkan.
TBBS_PRESSED: Tombol saat ini ditekan.
Enam gaya tombol Panduan Desain Aplikasi Antarmuka Windows resmi diwakili oleh nilai TBBS berikut:
Naik = 0
Mouse Turun = TBBS_PRESSED (| gaya lainnya)
Dinonaktifkan = TBBS_DISABLED
Turun = TBBS_CHECKED
Nonaktif = TBBS_CHECKED | TBBS_DISABLED
Tidak ditentukan = TBBS_INDETERMINATE
CDialogBar
Bilah dialog adalah bilah kontrol yang berisi kontrol Windows standar. Ini bertindak seperti dialog karena berisi kontrol dan mendukung tab di antara mereka. Ini juga bertindak seperti dialog karena menggunakan templat dialog untuk mewakili bilah.
CDialogBar
Digunakan untuk toolbar pratinjau cetak, yang berisi kontrol tombol dorong standar.
CDialogBar
Menggunakan seperti menggunakan CFormView
. Anda harus menentukan templat dialog untuk bilah dialog dan menghapus semua gaya kecuali WS_CHILD. Perhatikan bahwa dialog tidak boleh terlihat.
Pemberitahuan kontrol untuk CDialogBar
akan dikirim ke induk bilah kontrol (sama seperti tombol toolbar).
Dukungan CCmdUI untuk CDialogBar
Tombol bilah dialog harus diperbarui melalui mekanisme handler ON_UPDATE_COMMAND_UI. Pada waktu diam, bilah dialog akan memanggil handler ON_UPDATE_COMMAND_UI dengan ID perintah semua tombol yang memiliki ID >= 0x8000 (yaitu, dalam rentang ID perintah).
Handler ON_UPDATE_COMMAND_UI dapat memanggil:
Aktifkan: untuk mengaktifkan atau menonaktifkan tombol.
SetText: untuk mengubah teks tombol.
Kustomisasi dapat dilakukan melalui API manajer jendela standar.
Baca juga
Catatan Teknis menurut Angka
Catatan Teknis menurut Kategori