Freigeben über


Zeichnungen in einer Ansicht

Fast alle Drawing in der Anwendung kommt es in der OnDraw-Memberfunktion der Ansicht aufgelistet, die Sie in der Ansichtsklasse überschreiben müssen.(Die Ausnahme ist die Maus zeichnung, in Interpretieren von Benutzereingaben eine Sicht). Die OnDraw Überschreibung:

  1. Ruft Daten durch Aufrufen der Memberfunktionen des Dokuments ab, die Sie bereitstellen.

  2. Zeigt die Daten durch Aufrufen von Memberfunktionen für einen Gerätekontext Objekts an, dass das Framework OnDraw übergeben wird.

Wenn die Daten eines Dokuments auf eine Weise ändert, muss die Sicht neu gezeichnet werden, um die Änderungen widerzuspiegeln.In der Regel geschieht dies, wenn der Benutzer eine Änderung durch eine Ansicht im Dokument.In diesem Fall ruft die Ansicht die UpdateAllViews-Memberfunktion des Dokuments auf, um alle Ansichten auf dasselbe Dokument zu benachrichtigen, um sich selbst zu aktualisieren.UpdateAllViews ruft OnUpdate-Memberfunktion jeder Ansicht an.Die Standardimplementierung von OnUpdate ungültig macht den gesamten Clientbereich der Ansicht.Sie können dies überschreiben, um nur die Bereiche vom Clientbereich für ungültig erklärt werden, die den geänderten Teilen des Dokuments zuordnen.

Die UpdateAllViews-Memberfunktion der Klasse CDocument und die OnUpdate-Memberfunktion der Klasse CView können Sie die Daten übergeben, die beschreiben, welche Teile des Dokuments geändert wurden.Dieser "Hinweis" Weise können Sie den Bereich begrenzen, die die Sicht neu entwerfen muss.OnUpdate " Hinweis "akzeptiert zwei Argumente.Das erste, lHint vom Typ LPARAM, können Sie alle Daten, die Sie, während das zweite pHint vom Typ CObject*, können Sie einen Zeiger auf ein beliebiges Objekt übergeben, das von CObject abgeleitet ist.

Wenn eine Sicht nicht gültig ist, sendet Windows sie eine WM_PAINT Meldung.Die OnPaint-Handlerfunktion der Ansicht reagiert auf die Meldung, indem ein Objekt der Klasse CPaintDC Gerätekontext erstellt und ruft OnDraw-Memberfunktion der Ansicht an.Sie müssen nicht in der Regel eine überschreibende OnPaint-Handlerfunktion schreiben.

Gerätekontext ist eine Windows-Datenstruktur, die Informationen über die Zeichnungsattribute eines Geräts z. B. eine Anzeige oder einen Drucker enthält.Alle Aufrufe zum Zeichnen von einem Gerätekontext Objekt vorgenommen werden.Für das Zeichnen auf dem Bildschirm, wird ein OnDrawCPaintDC-Objekt übergeben.Für das Zeichnen auf einem Drucker, wird es einem CDC setup Objekt für den aktuellen Drucker übergeben.

Der Code zum Zeichnen in der Ansicht zuerst ruft einen Zeiger auf das Dokument ab, wird das Zeichnen von ruft den Gerätekontext.Das folgende einfache OnDraw Beispiel wird der Prozess:

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

In diesem Beispiel wird die GetData-Funktion als Member der abgeleiteten Dokumentklasse definieren.

Das Beispiel gibt die Zeichenfolge es aus dem Dokument abgerufen werden, zentriert in der Ansicht.Wenn der OnDraw Aufruf für einen Bildschirm zeichnung ist, ist das CDC-Objekt, das in pDC übergeben wird, CPaintDC, dessen Konstruktor BeginPaint bereits aufgerufen wurde.Aufrufe zum Zeichnen von Funktionen werden von den Zeiger Gerätekontext gerendert.Weitere Informationen über das Zeichnen Gerätekontexte und ruft CDC-Klasse finden Sie in der MFC-Referenz und Die Funktionsweise Fensterobjekten.

Weitere Beispiele zur Verwendung von OnDraw finden Sie unter MFC-Beispiele schreibt.

Siehe auch

Referenz

Mithilfe von Ansichten