Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ší, které je popsáno v tématu Interpretace uživatelského vstupu prostřednictvím zobrazení.) Vaše OnDraw
přetížení:
Získá data voláním funkcí členů dokumentu, které poskytnete.
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ě zobrazovací část volá členskou funkci UpdateAllViews dokumentu, aby upozornila všechna zobrazení na stejném dokumentu na nutnost se aktualizovat.
UpdateAllViews
volá členskou funkci každého zobrazení OnUpdate. Výchozí implementace OnUpdate
zneplatní celou oblast klienta zobrazení. Můžete ji přepsat tak, aby zneplatněla pouze ty oblasti klientské oblasti, které odpovídají upraveným částem dokumentu.
Členová funkce UpdateAllViews
třídy CDocument
a členová funkce OnUpdate
třídy CView
vám umožňují předávat informace popisující, které části dokumentu byly změněny. Tento mechanismus „nápovědy“ umožňuje omezit oblast, kterou musí zobrazení znovu vykreslit.
OnUpdate
přebírá dva argumenty typu "nápověda". 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 OnPaint zobrazení odpoví na zprávu vytvořením objektu kontextu zařízení třídy CPaintDC a zavolá funkci člena OnDraw
vašeho 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í. Při kreslení na obrazovce se předá objekt OnDraw
do CPaintDC
. 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 vykreslování na obrazovce OnDraw
, objekt CDC
předaný v pDC je to CPaintDC
, jehož konstruktor již zavolal BeginPaint
. 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 OnDraw
najdete v ukázkách MFC.