Sdílet prostřednictvím


Kreslení v zobrazení

Téměř všechny výkresy v aplikaci se vyskytují v členské funkci zobrazení OnDraw , kterou musíte přepsat ve třídě zobrazení. (Výjimkou je kreslení myší, probírané v tématuInterpretace uživatelského vstupu prostřednictvím zobrazení.) Vaše OnDraw přepsání:

  1. Získá data voláním členských funkcí dokumentu, které zadáte.

  2. Zobrazí data voláním členských funkcí objektu kontextu zařízení, který architektura předává OnDraw.

Když se data dokumentu nějakým způsobem změní, musí se zobrazení překreslit, aby odráželo změny. K tomu obvykle dochází, když uživatel provede změnu v zobrazení dokumentu. V tomto případě zobrazení volá členskou funkci UpdateAllViews dokumentu, aby upozorňovat všechna zobrazení na stejném dokumentu, aby se aktualizovaly samy. UpdateAllViews volá členskou funkci OnUpdate každého zobrazení. Výchozí implementace OnUpdate zneplatní celou oblast klienta zobrazení. Můžete ji přepsat tak, aby zneplatněla pouze ty oblasti klientské oblasti, které se mapují na upravené části dokumentu.

Členová UpdateAllViews funkce třídy CDocument a OnUpdate členová funkce třídy CView umožňují předávat informace popisující, které části dokumentu byly změněny. Tento mechanismus "hint" umožňuje omezit oblast, kterou musí zobrazení překreslit. OnUpdate přebírá dva argumenty "hint". První, lHint, typu LPARAM, umožňuje předat všechna data, která se vám líbí, zatímco druhý pHint, typu CObject*, umožňuje předat ukazatel na jakýkoli objekt odvozený z CObject.

Když se zobrazení stane neplatným, systém Windows ho odešle WM_PAINT zprávu. Funkce obslužné rutiny zobrazení je zapnutá Malování odpoví na zprávu vytvořením objektu kontextu zařízení třídy C Malování DC a zavolá členskou OnDraw funkci zobrazení. Obvykle nemusíte psát přepisování OnPaint funkce obslužné rutiny.

Kontext zařízení je datová struktura Systému Windows, která obsahuje informace o atributech výkresu zařízení, jako je zobrazení nebo tiskárna. Všechna volání výkresu se provádějí prostřednictvím objektu kontextu zařízení. Pro kreslení na obrazovce OnDraw se předá CPaintDC objekt. Pro kreslení na tiskárně se předává objekt CDC nastavený pro aktuální tiskárnu.

Kód pro kreslení v zobrazení nejprve načte ukazatel na dokument a pak provede volání výkresu prostřednictvím kontextu zařízení. Následující jednoduchý OnDraw příklad znázorňuje proces:

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

V tomto příkladu byste definovali GetData funkci jako člena odvozené třídy dokumentu.

Příklad vytiskne jakýkoli řetězec, který získá z dokumentu, na střed v zobrazení. Pokud je volání pro kresbu obrazovky, CDC objekt předaný v pDC je CPaintDC jehož konstruktor již volal BeginPaint.OnDraw Volání funkcí kreslení se provádí prostřednictvím ukazatele kontextu zařízení. Informace o kontextech zařízení a volání výkresu naleznete v tématu CDC třídy v odkazu MFC a práce s objekty okna.

Další příklady zápisu OnDrawnajdete v ukázkách MFC.

Viz také

Použití zobrazení