Nama penulis Qi Gao Sumber asli artikel Pengenalan asli Baru-baru ini, seseorang bertanggung jawab atas tugas pengembangan pembangkit listrik tenaga air di suatu tempat di Guizhou. Dalam mengimplementasikan modul sistem pemantauan antarmuka, saya harus menggunakan banyak sakelar dan hal-hal lain itu mewakili status pengoperasian peralatan saat ini. Setelah mencari di Internet, saya menemukan bahwa tidak ada barang bagus di area ini karena tidak melibatkan kontrol, saya menggunakan metode turunan kelas CSTATIC untuk memetakan pesan WM_PAINT untuk diimplementasikan. fungsinya. Saya akan memposting kelas dan gambar ini sekarang, berharap dapat membantu. Kontrol industri dan mereka yang mempelajari bidang ini dapat membantu.
Kontrol teks diimplementasikan dalam bentuk peta latar belakang, yaitu, operasi peta yang berbeda dilakukan dalam kondisi berbeda untuk mewakili status pengoperasian perangkat secara dinamis, karena kali ini mewakili status sakelar, saya menggunakan dua gambar untuk penggantian tampilan. Jika ada banyak situasi, dapat diperluas dan digunakan. Gambar saya gambar menggunakan papan gambar WINDOWS. Jika ada yang menggambar gaya saklar yang lebih indah, beri tahu saya (^_^, level saya terbatas)
Programnya sangat sederhana, perkiraan kodenya adalah sebagai berikut:
batal CSwitchStatic::OnPaint()
{
CPaintDC dc(ini); // konteks perangkat untuk melukis
// TODO: Tambahkan kode pengendali pesan Anda di sini
Benar;
GetClientRect(&rek);
CDC *mdc=CDC baru;
mdc->BuatDC yang Kompatibel(&dc);
peta bit HBITMAP;
beralih(ini->m_SystemMetric)
{
kasus STYLE_ONE:
jika(!ini->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
kalau tidak
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
merusak;
kasus STYLE_TWO:
jika(!ini->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF1));
kalau tidak
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON1));
merusak;
bawaan:
jika(!ini->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
kalau tidak
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
merusak;
}
mdc->SelectObject(hbitmap);
dc.BitBlt(persegi.kiri,persegi.atas,persegi.Lebar(),persegi.Tinggi(),mdc,0,0,SRCCOPY);
RilisDC(mdc);
::DeleteObject(hbitmap);
// Jangan panggil CStatic::OnPaint() untuk pesan pengecatan
}
Metode pemanggilannya adalah sebagai berikut:
Saya mengatur dua mode operasi sakelar dan dua gaya status sakelar dalam program ini. Program ini menyediakan metode pengaturan dinamis:
Defaultnya adalah SwitchOff. Jika Anda ingin mengubah status, Anda dapat menggunakan kode berikut:
SetSwitchState(BENAR);
Jika kita ingin mengubah gaya tampilan switch, kita dapat menggunakan kode berikut:
SetSwitchStyle(STYLE_TWO);//Gaya kedua
SetSwitchStyle(STYLE_ONE);//Gaya pertama
Memperluas