Dokument
klasa CDocument
|
|
-
-
Dokument w rozumieniu aplikacji typu dokument/widok
jest zbiorem danych tworzonych lub wczytywanych, modyfikowanych i
zapisywanych
-
Klasą obsługującą dokumenty w
MFC jest CDocument
-
Podstawowe cechy klasy CDocument:
Za prezentację dokumentu
odpowiedzialny jest widok, będący
obiektem klasy dziedziczącej z CView
-
Nie ma ograniczenia liczby typów dokumentów obsługiwanych
przez aplikację oraz nie ma ograniczenia liczby widoków dołączonych
do jednego typu dokumentów
-
Powiązanie dokumentu z widokiem odbywa się za pośrednictwem
wzorca dokumentu
-
widoki powiązane z jednym
dokumentem mogą pochodzić z wielu wzorców dokumentu
-
można pobrać wzorzec, z
którego pochodzi dokument korzystając z metody CDocument::GetDocTemplate
- jeśli istnieją co najmniej dwa widoki dokumentu
pochodzące z różnych wzorców dokumentu, to metoda ta
zwróci wzorzec, który został pierwszy wykorzystany (inaczej
mówiąc: wzorzec, przy pomocy którego powstał
dokument)
[początek strony]
[początek strony]
-
-
Serializacja dokumentów mieści się w schemacie serializacji
opracowanym w MFC dla wszystkich klas dziedziczących z
klasy CObject.
-
Serializacja dokumentów jest wykorzystywana
(jeśli tylko nie została świadomie ominięta) podczas wszystkich operacji odczytu
i zapisu dokumentu
-
domyślnie metoda CDocument::Serialize jest wołana
w przypadku próby odczytu lub zapisu dokumentu
-
ważnym aspektem serializacji jest
zadbanie o prawidłowe zapisywanie każdego obiektu
wykorzystywanego w dokumencie (w myśl zasady
serializacji w MFC obiekt sam siebie wczytuje i zapisuje)
-
Są dwa sposoby ominięcia serializacji MFC:
[początek strony]
-
-
Klasa CDocument dziedziczy z klasy CCmdTarget
i ma wbudowaną obsługę
komunikatów poprzez mapę komunikatów (message-map)
-
ponieważ dokument nie jest bezpośrednio powiązany
z żadnym oknem systemu Windows (pośredniczą
widoki), to nie może obsługiwać komunikatów
związanych w jakikolwiek sposób z oknami
-
jedynym komunikatem obsługiwanym przez dokumenty może
być WM_COMMAND, który obsługuje wszystkie
polecenia wydawane za pomocą menu, okna toolbar
lub akceleratorów (accelerators)
-
Jeśli dokument nie ma wbudowanej obsługi polecenia
(z menu, okna toolbar lub akceleratora), a takie
polecenie doszło do tego dokumentu, to zostanie ono
przekazane do obsłużenia wzorcowi
tego dokumentu.
[początek strony]
-
-
Cykl życia dokumentu w aplikacji MDI (Multiple-Document
Interface), czyli zawierającej wiele okien roboczych,
które mogą przedstawiać różne dokumenty:
-
dokument jest dynamicznie tworzony, wywoływany jest
konstruktor
-
wywoływana jest jedna z dwóch metod: CDocument::OnNewDocument
(jeśli tworzony jest nowy dokument) lub CDocument::OnOpenDocument
(jeśli wczytywany jest już istniejący
dokument)
-
po zakończeniu pracy z dokumentem wywoływana
jest metoda CDocument::DeleteContents, w której
powinno się znaleźć zwalnianie pamięci
dynamicznie przydzielonej dokumentowi
-
wywoływany jest destruktor i dokument jest niszczony
-
Cykl życia dokumentu w aplikacji SDI (Single-Document
Interface), czyli takiej, w której nie mogą być
równocześnie otwarte dwa dokumenty:
-
zawsze w aplikacji istnieje jeden dokument, jego
konstruktor wywoływany jest przy starcie, a destruktor
przy końcu pracy aplikacji
-
w przypadku tworzenia lub wczytywania innego dokumentu
zostanie wywołana jedna z metod CDocument::OnNewDocument
lub CDocument::OnOpenDocument dla tego samego obiektu,
który zawierał poprzednio otwarty dokument
-
po zakończeniu pracy z dokumentem wywoływana
jest metoda CDocument::DeleteContents, w której
powinno się znaleźć zwalnianie pamięci
dynamicznie przydzielonej dokumentowi
[początek strony]
[początek strony]
[początek strony]
|