Aracılığıyla paylaş


Bir Görünümde Çizim Yapma

Uygulamanızdaki neredeyse tüm çizimler, görünüm sınıfınızda geçersiz kılmanız gereken görünümün OnDraw üye işlevinde gerçekleşir. (Özel durum, içinde tartışılan fare çizimidirGörünüm Aracılığıyla Kullanıcı Girişini Yorumlama.) Geçersiz kılmanız OnDraw :

  1. Sağladığınız belge üyesi işlevlerini çağırarak verileri alır.

  2. Çerçevenin öğesine geçirdiği OnDrawbir cihaz bağlamı nesnesinin üye işlevlerini çağırarak verileri görüntüler.

Belgenin verileri bir şekilde değiştiğinde, görünümün değişiklikleri yansıtacak şekilde yeniden çizilmesi gerekir. Genellikle, kullanıcı belgedeki bir görünüm aracılığıyla değişiklik yaptığında bu durum ortaya çıkar. Bu durumda görünüm, aynı belgedeki tüm görünümlerin kendilerini güncelleştirmelerini bildirmek için belgenin UpdateAllViews üye işlevini çağırır. UpdateAllViews her görünümün OnUpdate üye işlevini çağırır. varsayılan uygulaması OnUpdate , görünümün istemci alanının tamamını geçersiz klır. Yalnızca belgenin değiştirilmiş bölümleriyle eşlenen istemci alanının bölgelerini geçersiz kılmak için geçersiz kılabilirsiniz.

sınıfının UpdateAllViews üye işlevi ve sınıfın CDocument OnUpdate CView üye işlevi, belgenin hangi bölümlerinin değiştirildiğini açıklayan bilgileri geçirmenize olanak tanır. Bu "ipucu" mekanizması, görünümün yeniden çizılması gereken alanı sınırlamanıza olanak tanır. OnUpdate iki "ipucu" bağımsız değişkeni alır. LPARAM türündeki birinci lHint, istediğiniz verileri geçirmenize olanak tanırken, *türünde CObjectikinci pHint, öğesinden CObjecttüretilen herhangi bir nesneye bir işaretçi geçirmenizi sağlar.

Bir görünüm geçersiz olduğunda, Windows bu görünüme bir WM_PAINT iletisi gönderir. Görünümün OnPaint işleyici işlevi, CPaintDC sınıfının cihaz bağlamı nesnesini oluşturarak iletiye yanıt verir ve görünümünüzün OnDraw üye işlevini çağırır. Normalde geçersiz kılma OnPaint işleyicisi işlevi yazmanız gerekmez.

Cihaz bağlamı, bir cihazın görüntü veya yazıcı gibi çizim öznitelikleri hakkında bilgi içeren bir Windows veri yapısıdır. Tüm çizim çağrıları bir cihaz bağlamı nesnesi aracılığıyla yapılır. Ekranda OnDraw çizim için bir CPaintDC nesne geçirilir. Yazıcıda çizim için, geçerli yazıcı için ayarlanmış bir CDC nesnesi geçirilir.

Görünümde çizim kodunuz önce belgenin işaretçisini alır, ardından cihaz bağlamı üzerinden çizim çağrıları yapar. Aşağıdaki basit OnDraw örnek işlemi gösterir:

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());
}

Bu örnekte, işlevi türetilmiş belge sınıfınızın bir üyesi olarak tanımlarsınız GetData .

Örnek, belgeden aldığı dizeyi görünümde ortalanmış olarak yazdırır. OnDraw Çağrı ekran çizimi içinse, CDC pDC'de geçirilen nesne oluşturucusunun zaten çağırdığı BeginPaintbir CPaintDC nesnesidir. Çizim işlevlerine çağrılar, cihaz bağlamı işaretçisi aracılığıyla yapılır. Cihaz bağlamları ve çizim çağrıları hakkında bilgi için bkz. MFC Başvurusu ve Pencere Nesneleriyle Çalışma bölümünde sınıf CDC'leri.

yazma OnDrawhakkında daha fazla örnek için bkz . MFC Örnekleri.

Ayrıca bkz.

Görünümleri Kullanma