Belajar membuat kelas STATIS untuk fungsi alarm dengan penulis Jiang Chuan, Qi Gao
Pengenalan Kontrol alarm sering terlihat di berbagai sistem kontrol industri. Ada banyak metode untuk mengkhawatirkan, yang dapat ditandai dengan teks atau diwakili oleh grafik. Prinsipnya tidak lebih dari membangun objek kelas CDC dan kemudian menggunakan berbagai dasar yang disediakan Gambar saja grafis menggunakan atribut primitif. Di sini kita akan membuat program yang dapat menampilkan teks alarm. Ketika alarm terjadi, kita dapat mem-flash latar belakang untuk mencapai fungsi tersebut.
Kami biasanya menggunakan metode turunan untuk mengimplementasikan jenis pemrosesan ini dalam teks.
Pertama gunakan wizard VC untuk membuat proyek berbasis dialog.
Kemudian kita menempatkan kontrol STATIS pada antarmuka kotak dialog dan mengatur posisinya.
Persiapan dasar untuk menurunkan kelas berbasis CStatic bernama CStaticRectangle untuk kontrol STATIC kita telah selesai. Tugas kita selanjutnya adalah menambahkan konten ke kelas turunan baru untuk mencapai efek layar alarm yang diinginkan.
Menurut apa yang saya katakan di artikel terakhir saya, dengan menggunakan metode buffering ganda, kita perlu menambahkan tiga file MemDC.h, AutoFont.h, dan AutoFont.cpp ke proyek di Internet saat ini. Pengguna tidak perlu mempertimbangkan pembuatan fungsi API yang rumit saat membuat objek CFont. Mereka hanya perlu membuat beberapa pengaturan parameter sederhana untuk menyelesaikan fungsi tersebut, jadi kami menggunakan kelas ini di sini untuk mengimplementasikan kontrol font teks alarm.
Tentukan objek
//Definisi warna dapat ditambah atau dikurangi sesuai dengan keadaan sebenarnya.
#tentukan COLOR_RED RGB(255,0,0)
#tentukan WARNA_HIJAU RGB(0,255,0)
terlindung:
CBitmap *m_pBitmapOldBackground;//Ketiganya digunakan untuk menggambar buffer ganda
CBitmap m_bitmapBackground;
CDC m_dcLatar Belakang;
CRect m_rectCtrl; // area kontrol
nMillSec pendek; //Pengatur Waktu
CAutoFont *m_pFnt; //Membangun font teks alarm
publik:
COLORREF m_BkColor;//Warna latar belakang
COLORREF m_TextColor;//Warna teks
CString strText; //Menampilkan teks alarm
BOOL bGleam;//Apakah berkedip
Inisialisasi variabel dalam konstruktor:
CStaticRectangle::CStaticRectangle()
{
m_BkWarna = WARNA_MERAH;
m_TextColor = RGB(255.128.64);
nMillSec = 10;
bKilau = SALAH;
m_pFnt = new CAutoFont("skrip resmi");
m_pFnt->SetTinggi(28);
m_pFnt->Lebar Set(12);
m_pFnt->SetBold(BENAR);
}
Memori dilepaskan di destruktor
CStaticRectangle::~CStaticRectangle()
{
jika(m_pFnt)
hapus m_pFnt;
}
Untuk menggambar fungsi alarm STATIS, kita hanya perlu memetakan pesan WM_PAINT, lalu menggambar ulang antarmuka dan menampilkan teksnya.
batalkan CStaticRectangle::OnPaint()
{
CPaintDC dc(ini); // konteks perangkat untuk melukis
// TODO: Tambahkan kode pengendali pesan Anda di sini
// Dapatkan area kendali
GetClientRect(&m_rectCtrl);
CMemDC memDC(&dc, &m_rectCtrl);
if(m_dcBackground.GetSafeHdc()== NULL|| (m_bitmapBackground.m_hObject == NULL))
{
m_dcBackground.CreateCompatibleDC(&dc);
m_bitmapBackground.CreateCompatibleBitmap(&dc, m_rectCtrl.Width(), m_rectCtrl.Height()) ;
m_pBitmapOldBackground = m_dcBackground.SelectObject(&m_bitmapBackground);
}
DrawRectangleBackground(&m_dcBackground, m_rectCtrl);
memDC.BitBlt(0, 0, m_rectCtrl.Width(), m_rectCtrl.Height(),
&m_dcLatar Belakang, 0, 0, SRCCOPY);
// Jangan panggil CStatic::OnPaint() untuk pesan pengecatan
}
Selanjutnya kita mengontrol tampilan informasi yang relevan. Yang perlu kita perhatikan disini adalah tampilan teks kita. Disini kita perlu menghitung posisi tampilan teks.
Kita bisa mendapatkan CSize teks melalui pDC->GetTextExtent();, dan kemudian menggunakan kontrol untuk mendapatkan posisi tampilan teks.
Cara yang digunakan disini adalah dengan menampilkannya di tengah.
void CStaticRectangle::DrawRectangleBackground(CDC *pDC, CRect &rect)
{
CBrush brushFill, *pBrushOld;
int nXUkuran,nYUkuran;
CUkuran szTeks;
CFont *fOldFont;
nXSize = persegi.Lebar();
nYUkuran = persegi.Tinggi();
brushFill.DeleteObject();
brushFill.CreateSolidBrush(m_BkColor);
pBrushOld = pDC->SelectObject(&brushFill);
pDC->Persegi Panjang(persegi);
pDC->SetBkColor(m_BkColor);
pDC->SetTextColor(m_TextColor);
fOldFont = (CFont *)pDC->SelectObject(m_pFnt);
szText = pDC->GetTextExtent(strText);
nXUkuran = (nXUkuran - szText.cx)/2;
nYSize = (nYSize - szText.cy)/2;
pDC->TextOut(nXUkuran,nYUkuran,strTeks);
pDC->SelectObject(pBrushOld);
pDC->Pilih Objek(&fOldFont);
brushFill.DeleteObject();
}
Jika kita ingin menerapkan fungsi alarm, kita perlu menggunakan fungsi pengatur waktu untuk mengubah warna latar belakang secara berkala dan kemudian menyegarkan tampilan.
Pada titik ini, pekerjaan dasar telah selesai. Hal berikutnya yang harus dilakukan adalah menyediakan antarmuka yang dapat dimodifikasi secara dinamis oleh pengguna.
batal CStaticRectangle::SetRectangleText(CString strVal)
{
ini->strTeks = strVal;
}
void CStaticRectangle::SetBackColor(UINT nStyle)//Mengatur warna latar belakang
{
ini->m_BkColor = nStyle;
}
batal CStaticRectangle::SetBkGleam(BOOL bShow)
{
jika(ini->bGleam)
{
jika(!bTampilkan)
KillTimer(nMillSec);
}
kalau tidak
{
jika (bTampilkan)
SetTimer(nMillSec,750,NULL);
}
ini->bGleam = bShow;
}
Nah, sekarang kelas fungsional kita sudah selesai, hal selanjutnya yang harus dilakukan adalah menghubungkannya dengan CSTATIC pada antarmuka.
Buat variabel terkait kontrol STATIS (Tipe kontrol) melalui CLASSWIZARD, lalu ubah tipe turunannya ke CStaticRectangle kami, dan atur efek flashing, dan kita dapat melihat efeknya.
Memperluas