Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Prawie cały rysunek w aplikacji występuje w funkcji składowej widoku OnDraw , którą należy zastąpić w klasie widoków. (Wyjątkiem jest rysowanie myszą, omówione w temacie Interpretowanie danych wejściowych użytkownika za pośrednictwem widoku.) Twoje przesłonięcie OnDraw:
Pobiera dane, wywołując podane funkcje składowe dokumentu.
Wyświetla dane, wywołując funkcje składowe obiektu kontekstu urządzenia, które framework przekazuje do elementu
OnDraw.
Gdy dane dokumentu zmieniają się w jakiś sposób, widok musi zostać ponownie narysowany, aby odzwierciedlić zmiany. Zazwyczaj dzieje się tak, gdy użytkownik wprowadza zmianę w widoku dokumentu. W takim przypadku widok wywołuje funkcję składową UpdateAllViews dokumentu, aby powiadomić wszystkie widoki w tym samym dokumencie o konieczności zaktualizowania siebie.
UpdateAllViews wywołuje funkcję składową OnUpdate każdego widoku. Domyślna implementacja OnUpdate unieważnia cały obszar roboczy widoku. Można go zastąpić, aby unieważnić tylko te regiony obszaru klienta, które są mapowane na zmodyfikowane fragmenty dokumentu.
UpdateAllViews Funkcja składowa klasy CDocument oraz funkcja składowa klasy OnUpdateCView umożliwiają przekazanie informacji o tym, które części dokumentu zostały zmodyfikowane. Ten mechanizm "wskazówek" pozwala ograniczyć obszar, który widok musi ponownie rysować.
OnUpdate przyjmuje dwa argumenty "wskazówka". Pierwszy, lHint typu LPARAM, umożliwia przekazywanie dowolnych danych, a drugi, pHint, typu CObject*, pozwala przekazać wskaźnik do dowolnego obiektu pochodzącego z CObject.
Gdy widok zostanie uznany za nieważny, system Windows wysyła wiadomość WM_PAINT. Funkcja obsługi OnPaint widoku odpowiada na komunikat, tworząc obiekt kontekstu urządzenia klasy CPaintDC, a następnie wywołuje funkcję składową widoku OnDraw. Zwykle nie trzeba pisać zastępowającej OnPaint funkcji obsługi.
Kontekst urządzenia to struktura danych systemu Windows zawierająca informacje o atrybutach rysunku urządzenia, takich jak wyświetlacz lub drukarka. Wszystkie wywołania rysunku są wykonywane za pośrednictwem obiektu kontekstu urządzenia. Do rysowania na ekranie przekazywany jest obiekt OnDrawCPaintDC. W przypadku rysowania na drukarce jest przekazywany obiekt CDC skonfigurowany dla bieżącej drukarki.
Kod do rysowania w widoku najpierw pobiera wskaźnik do dokumentu, a następnie wykonuje wywołania rysowania za pośrednictwem kontekstu urządzenia. Poniższy prosty OnDraw przykład ilustruje 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());
}
W tym przykładzie zdefiniujesz funkcję GetData jako element członkowski klasy pochodnej dokumentu.
W przykładzie jest wyświetlany dowolny ciąg pobierany z dokumentu, wyśrodkowany w widoku.
OnDraw Jeśli wywołanie dotyczy rysowania na ekranie, CDC obiekt przekazany w pDC jest CPaintDC którego konstruktor już został wywołany przez BeginPaint. Wywołania funkcji rysowania są wykonywane za pośrednictwem wskaźnika kontekstu urządzenia. Aby uzyskać informacje o kontekstach urządzeń i wywołaniach rysowania, zobacz klasę CDC w dokumentacji MFC i Praca z obiektami okna.
Aby uzyskać więcej przykładów sposobu pisania OnDraw, zobacz przykłady MFC.