Menggambar dalam Tampilan
Hampir semua gambar dalam aplikasi Anda terjadi dalam fungsi anggota tampilan OnDraw
, yang harus Anda ambil alih di kelas tampilan Anda. (Pengecualiannya adalah gambar mouse, dibahas dalam Menafsirkan Input Pengguna Melalui Tampilan.) Penimpaan Anda OnDraw
:
Mendapatkan data dengan memanggil fungsi anggota dokumen yang Anda sediakan.
Menampilkan data dengan memanggil fungsi anggota dari objek konteks perangkat yang diteruskan kerangka kerja ke
OnDraw
.
Saat data dokumen berubah dalam beberapa cara, tampilan harus digambar ulang untuk mencerminkan perubahan. Biasanya, ini terjadi ketika pengguna membuat perubahan melalui tampilan pada dokumen. Dalam hal ini, tampilan memanggil fungsi anggota UpdateAllViews dokumen untuk memberi tahu semua tampilan pada dokumen yang sama untuk memperbarui diri mereka sendiri. UpdateAllViews
memanggil fungsi anggota OnUpdate setiap tampilan. Implementasi default membatalkan OnUpdate
seluruh area klien tampilan. Anda dapat mengambil alihnya untuk membatalkan hanya wilayah area klien yang memetakan ke bagian dokumen yang dimodifikasi.
Fungsi UpdateAllViews
anggota kelas CDocument
dan OnUpdate
fungsi anggota kelas CView
memungkinkan Anda meneruskan informasi yang menjelaskan bagian dokumen apa yang dimodifikasi. Mekanisme "petunjuk" ini memungkinkan Anda membatasi area yang harus digambar ulang tampilan. OnUpdate
mengambil dua argumen "petunjuk". LHint pertama, jenis LPARAM, memungkinkan Anda meneruskan data apa pun yang Anda suka, sementara yang kedua, pHint, dari jenis CObject
*, memungkinkan Anda meneruskan pointer ke objek apa pun yang berasal dari CObject
.
Ketika tampilan menjadi tidak valid, Windows mengirimkan pesan WM_PAINT . Fungsi handler OnPaint tampilan merespons pesan dengan membuat objek konteks perangkat CPaintDC kelas dan memanggil fungsi anggota tampilan OnDraw
Anda. Anda biasanya tidak perlu menulis fungsi handler penggantian OnPaint
.
Konteks perangkat adalah struktur data Windows yang berisi informasi tentang atribut gambar perangkat seperti tampilan atau printer. Semua panggilan gambar dilakukan melalui objek konteks perangkat. Untuk menggambar di layar, OnDraw
diteruskan objek CPaintDC
. Untuk menggambar pada pencetak, objek CDC diteruskan untuk pencetak saat ini.
Kode Anda untuk menggambar dalam tampilan terlebih dahulu mengambil penunjuk ke dokumen, lalu melakukan panggilan gambar melalui konteks perangkat. Contoh sederhana OnDraw
berikut mengilustrasikan prosesnya:
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CString s = pDoc->GetData(); // Returns a CString
CRect rect;
GetClientRect(&rect);
pDC->SetTextAlign(TA_BASELINE | TA_CENTER);
pDC->TextOut(rect.right / 2, rect.bottom / 2, s, s.GetLength());
}
Dalam contoh ini, Anda akan menentukan GetData
fungsi sebagai anggota kelas dokumen turunan Anda.
Contoh mencetak string apa pun yang didapat dari dokumen, dipusatkan dalam tampilan. OnDraw
Jika panggilan untuk gambar layar, objek yang CDC
diteruskan dalam pDC adalah CPaintDC
konstruktornya telah memanggil BeginPaint
. Panggilan ke fungsi menggambar dilakukan melalui penunjuk konteks perangkat. Untuk informasi tentang konteks perangkat dan panggilan gambar, lihat kelas CDC di Referensi MFC dan Bekerja dengan Objek Jendela.
Untuk contoh selengkapnya tentang cara menulis OnDraw
, lihat Sampel MFC.