CDocument
Třída
Poskytuje základní funkce pro uživatelem definované třídy dokumentů.
Syntaxe
class CDocument : public CCmdTarget
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CDocument::CDocument |
CDocument Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
CDocument::AddView |
Připojí zobrazení k dokumentu. |
CDocument::BeginReadChunks |
Inicializuje čtení bloků dat. |
CDocument::CanCloseFrame |
Upřesňující přepisovatelná; volána před zavřením okna rámečku pro zobrazení tohoto dokumentu. |
CDocument::ClearChunkList |
Vymaže seznam bloků dat. |
CDocument::ClearPathName |
Vymaže cestu k objektu dokumentu. |
CDocument::DeleteContents |
Volá se k vyčištění dokumentu. |
CDocument::FindChunk |
Vyhledá blok dat se zadaným identifikátorem GUID. |
CDocument::GetAdapter |
Vrátí ukazatel na objekt, který implementuje IDocument rozhraní. |
CDocument::GetDocTemplate |
Vrátí ukazatel na šablonu dokumentu, která popisuje typ dokumentu. |
CDocument::GetFile |
Vrátí ukazatel na požadovaný CFile objekt. |
CDocument::GetFirstViewPosition |
Vrátí pozici první v seznamu zobrazení; slouží k zahájení iterace. |
CDocument::GetNextView |
Prochází seznam zobrazení přidružených k dokumentu. |
CDocument::GetPathName |
Vrátí cestu k datovému souboru dokumentu. |
CDocument::GetThumbnail |
Volá se k vytvoření rastrového obrázku, který bude používat zprostředkovatel miniatur k zobrazení miniatury. |
CDocument::GetTitle |
Vrátí název dokumentu. |
CDocument::InitializeSearchContent |
Volá se k inicializaci obsahu vyhledávání pro obslužnou rutinu vyhledávání. |
CDocument::IsModified |
Určuje, jestli byl dokument od posledního uložení změněn. |
CDocument::IsSearchAndOrganizeHandler |
Určuje, zda byla tato instance objektu vytvořena pro obslužnou rutinu CDocument vyhledávání a uspořádání. |
CDocument::LoadDocumentFromStream |
Volána pro načtení dat dokumentu ze streamu. |
CDocument::OnBeforeRichPreviewFontChanged |
Volá se před změnou písma Rich Preview. |
CDocument::OnChangedViewList |
Volá se po přidání nebo odebrání zobrazení z dokumentu. |
CDocument::OnCloseDocument |
Zavolá se k zavření dokumentu. |
CDocument::OnCreatePreviewFrame |
Volal ho architektura, když potřebuje vytvořit rámec náhledu pro Rich Preview. |
CDocument::OnDocumentEvent |
Volá se rozhraním v reakci na událost dokumentu. |
CDocument::OnDrawThumbnail |
Přepsat tuto metodu v odvozené třídě nakreslit obsah miniatury. |
CDocument::OnLoadDocumentFromStream |
Volá se rozhraním, když potřebuje načíst data dokumentu ze streamu. |
CDocument::OnNewDocument |
Volá se k vytvoření nového dokumentu. |
CDocument::OnOpenDocument |
Volá se k otevření existujícího dokumentu. |
CDocument::OnPreviewHandlerQueryFocus |
Nasměruje obslužnou rutinu náhledu tak, aby vrátila HWND volání GetFocus funkce. |
CDocument::OnPreviewHandlerTranslateAccelerator |
Nasměruje obslužnou rutinu náhledu tak, aby zpracovávala stisknutí kláves předané z pumpy zprávy procesu, ve kterém je spuštěná obslužná rutina náhledu. |
CDocument::OnRichPreviewBackColorChanged |
Volá se při změně barvy pozadí s formátem RTF. |
CDocument::OnRichPreviewFontChanged |
Volá se, když se změnilo písmo s formátováním náhledu. |
CDocument::OnRichPreviewSiteChanged |
Volá se při změně webu s formátem Rich Preview. |
CDocument::OnRichPreviewTextColorChanged |
Volá se při změně barvy textu ve formátu RTF. |
CDocument::OnSaveDocument |
Volá se k uložení dokumentu na disk. |
CDocument::OnUnloadHandler |
Volá se rozhraním při uvolnění obslužné rutiny náhledu. |
CDocument::PreCloseFrame |
Volá se před zavřeným oknem rámečku. |
CDocument::ReadNextChunkValue |
Přečte další hodnotu bloku dat. |
CDocument::ReleaseFile |
Uvolní soubor, který ho zpřístupní pro použití jinými aplikacemi. |
CDocument::RemoveChunk |
Odebere blok dat se zadaným GUID textem . |
CDocument::RemoveView |
Odpojte zobrazení z dokumentu. |
CDocument::ReportSaveLoadException |
Upřesňující přepisovatelná; volána při operaci otevření nebo uložení nelze dokončit kvůli výjimce. |
CDocument::SaveModified |
Upřesňující přepisovatelná; vyzývá uživatele, zda má být dokument uložen. |
CDocument::SetChunkValue |
Nastaví hodnotu bloku dat. |
CDocument::SetModifiedFlag |
Nastaví příznak označující, že jste dokument od posledního uložení změnili. |
CDocument::SetPathName |
Nastaví cestu k datovému souboru používanému dokumentem. |
CDocument::SetTitle |
Nastaví název dokumentu. |
CDocument::UpdateAllViews |
Upozorní všechna zobrazení, která dokument změnila. |
Chráněné metody
Název | Popis |
---|---|
CDocument::OnFileSendMail |
Odešle e-mailovou zprávu s připojeným dokumentem. |
CDocument::OnUpdateFileSendMail |
Povolí příkaz Odeslat poštu, pokud je k dispozici podpora pošty. |
Veřejné datové členy
Název | Popis |
---|---|
CDocument::m_bGetThumbnailMode |
Určuje, že CDocument objekt byl vytvořen knihovnou dllhost pro miniatury. Měla by být vrácena CView::OnDraw se změnami . |
CDocument::m_bPreviewHandlerMode |
Určuje, že CDocument objekt byl vytvořen prevhost pro Rich Preview . Měla by být vrácena CView::OnDraw se změnami . |
CDocument::m_bSearchMode |
Určuje, že CDocument objekt byl vytvořen indexerem nebo jinou vyhledávací aplikací. |
CDocument::m_clrRichPreviewBackColor |
Určuje barvu pozadí okna s formátem náhledu. Tato barva je nastavena hostitelem. |
CDocument::m_clrRichPreviewTextColor |
Určuje barvu popředí okna s formátem náhledu. Tato barva je nastavena hostitelem. |
CDocument::m_lfRichPreviewFont |
Určuje písmo textu pro okno náhledu ve formátu RTF. Tyto informace o písmu jsou nastaveny hostitelem. |
Poznámky
Dokument představuje jednotku dat, kterou uživatel obvykle otevře pomocí příkazu Otevřít soubor a uloží pomocí příkazu Uložit soubor.
CDocument
podporuje standardní operace, jako je vytvoření dokumentu, jeho načtení a uložení. Architektura manipuluje s dokumenty pomocí rozhraní definovaného rozhraním CDocument
.
Aplikace může podporovat více než jeden typ dokumentu; Aplikace může například podporovat tabulky i textové dokumenty. Každý typ dokumentu má přidruženou šablonu dokumentu; Šablona dokumentu určuje, jaké prostředky (například nabídka, ikona nebo tabulka akcelerátorů) se pro daný typ dokumentu používají. Každý dokument obsahuje ukazatel na přidružený CDocTemplate
objekt.
Uživatelé komunikují s dokumentem prostřednictvím CView
objektů přidružených k němu. Zobrazení vykreslí obrázek dokumentu v okně rámečku a interpretuje vstup uživatele jako operace v dokumentu. Dokument může mít přidruženo více zobrazení. Když uživatel otevře okno v dokumentu, vytvoří rozhraní zobrazení a připojí ho k dokumentu. Šablona dokumentu určuje, jaký typ okna zobrazení a rámečku se používá k zobrazení každého typu dokumentu.
Dokumenty jsou součástí standardního směrování příkazů architektury a následně přijímají příkazy ze standardních komponent uživatelského rozhraní (například položka nabídky Uložit soubor). Dokument přijímá příkazy předané aktivním zobrazením. Pokud dokument nezpracuje daný příkaz, předá příkaz šabloně dokumentu, která ho spravuje.
Při úpravě dat dokumentu musí každé zobrazení tyto úpravy odrážet. CDocument
poskytuje člena UpdateAllViews
funkce, která vás upozorní na zobrazení těchto změn, aby se zobrazení mohly podle potřeby překreslit. Architektura také vyzve uživatele, aby před zavřením souboru uložil upravený soubor.
Pokud chcete implementovat dokumenty v typické aplikaci, musíte udělat toto:
Odvodit třídu z
CDocument
každého typu dokumentu.Přidejte členské proměnné pro ukládání dat jednotlivých dokumentů.
Implementujte členské funkce pro čtení a úpravy dat dokumentu. Zobrazení dokumentu jsou nejdůležitějšími uživateli těchto členských funkcí.
Přepište členskou
CObject::Serialize
funkci ve třídě dokumentu, která zapisuje a čte data dokumentu na disk a z disku.
CDocument
podporuje odesílání dokumentu e-mailem, pokud je k dispozici podpora pošty (MAPI). Viz články MAPI a podpora MAPI v prostředí MFC.
Další informace naleznete v CDocument
tématu Serializace, Document/View Architecture Topics a Document/View Creation.
Hierarchie dědičnosti
CDocument
Požadavky
Záhlaví: afxwin.h
CDocument::AddView
Voláním této funkce připojíte zobrazení k dokumentu.
void AddView(CView* pView);
Parametry
pView
Odkazuje na přidané zobrazení.
Poznámky
Tato funkce přidá zadané zobrazení do seznamu zobrazení přidružených k dokumentu; funkce také nastaví ukazatel dokumentu zobrazení na tento dokument. Architektura volá tuto funkci při připojování nově vytvořeného objektu zobrazení k dokumentu; k tomu dochází v reakci na příkaz Nový soubor, Otevřít soubor nebo Nové okno nebo když je rozděleno okno rozdělovače.
Tuto funkci zavolejte jenom v případě, že ručně vytváříte a připojujete zobrazení. Obvykle necháte architekturu propojit dokumenty a zobrazení definováním objektu CDocTemplate
pro přidružení třídy dokumentu, třídy zobrazení a třídy okna rámečku.
Příklad
// The following example toggles two views in an SDI (single document
// interface) frame window. A design decision must be made as to
// whether to leave the inactive view connected to the document,
// such that the inactive view continues to receive OnUpdate
// notifications from the document. It is usually desirable to
// keep the inactive view continuously in sync with the document, even
// though it is inactive. However, doing so incurs a performance cost,
// as well as the programming cost of implementing OnUpdate hints.
// It may be less expensive, in terms of performance and/or programming,
// to re-sync the inactive view with the document only with it is
// reactivated. This example illustrates this latter approach, by
// reconnecting the newly active view and disconnecting the newly
// inactive view, via calls to CDocument::AddView and RemoveView.
void CMainFrame::OnViewChange(UINT nCmdID)
// There is an ON_COMMAND_RANGE message map entry associated with
// OnViewChange:
// ON_COMMAND_RANGE(ID_VIEW_CHANGE1, ID_VIEW_CHANGE2, &OnViewChange)
{
CView *pViewAdd;
CView *pViewRemove;
CDocument *pDoc = GetActiveDocument();
// cvView1 and cvView2 are enum members defined in my CMainFrame class
if ((nCmdID == ID_VIEW_CHANGE1) && (m_currentView == cvView1))
return;
if ((nCmdID == ID_VIEW_CHANGE2) && (m_currentView == cvView2))
return;
if (nCmdID == ID_VIEW_CHANGE2)
{
if (m_pView2 == NULL)
{
m_pView1 = GetActiveView();
m_pView2 = new CMyView2;
//Note that if OnSize has been overridden in CMyView2
//and GetDocument() is used in this override it can
//cause assertions and, if the assertions are ignored,
//cause access violation.
m_pView2->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, rectDefault, this,
AFX_IDW_PANE_FIRST + 1, NULL);
}
pViewAdd = m_pView2;
pViewRemove = m_pView1;
m_currentView = cvView2;
}
else
{
pViewAdd = m_pView1;
pViewRemove = m_pView2;
m_currentView = cvView1;
}
// Set the child i.d. of the active view to AFX_IDW_PANE_FIRST,
// so that CFrameWnd::RecalcLayout will allocate to this
// "first pane" that portion of the frame window's client area
// not allocated to control bars. Set the child i.d. of the
// other view to anything other than AFX_IDW_PANE_FIRST; this
// examples switches the child id's of the two views.
int nSwitchChildID = pViewAdd->GetDlgCtrlID();
pViewAdd->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pViewRemove->SetDlgCtrlID(nSwitchChildID);
// Show the newly active view and hide the inactive view.
pViewAdd->ShowWindow(SW_SHOW);
pViewRemove->ShowWindow(SW_HIDE);
// Connect the newly active view to the document, and
// disconnect the inactive view.
pDoc->AddView(pViewAdd);
pDoc->RemoveView(pViewRemove);
SetActiveView(pViewAdd);
RecalcLayout();
}
CDocument::BeginReadChunks
Inicializuje čtení bloků dat.
virtual void BeginReadChunks ();
Poznámky
CDocument::CanCloseFrame
Volá se rozhraním před oknem rámečku, ve kterém je dokument zavřený.
virtual BOOL CanCloseFrame(CFrameWnd* pFrame);
Parametry
pFrame
Odkazuje na okno rámečku zobrazení připojeného k dokumentu.
Návratová hodnota
Nenulové, pokud je bezpečné zavřít okno rámečku; jinak 0.
Poznámky
Výchozí implementace zkontroluje, jestli se v dokumentu zobrazují jiná okna s rámečkem. Pokud je zadané okno rámečku poslední okno, které dokument zobrazuje, funkce vyzve uživatele, aby dokument uložil, pokud byl změněn. Tuto funkci přepište, pokud chcete provést speciální zpracování při zavření okna rámečku. Jedná se o pokročilý přepis.
CDocument::CDocument
CDocument
Vytvoří objekt.
CDocument();
Poznámky
Architektura zpracovává vytváření dokumentů za vás. OnNewDocument
Přepište členskou funkci tak, aby prováděla inicializaci na základě jednotlivých dokumentů. To je zvlášť důležité v aplikacích s jedním rozhraním dokumentů (SDI).
CDocument::ClearChunkList
Vymaže seznam bloků dat.
virtual void ClearChunkList ();
Poznámky
CDocument::ClearPathName
Vymaže cestu k objektu dokumentu.
virtual void ClearPathName();
Poznámky
Vymazání cesty z objektu CDocument
způsobí, že aplikace vyzve uživatele při dalším uložení dokumentu. Příkaz Uložit se tak chová jako příkaz Uložit jako.
CDocument::DeleteContents
Volal rozhraní pro odstranění dat dokumentu bez zničení samotného objektu CDocument
.
virtual void DeleteContents();
Poznámky
Nazývá se těsně před zničením dokumentu. Volá se také, aby byl dokument před opětovným použitím prázdný. To je zvlášť důležité pro aplikaci SDI, která používá pouze jeden dokument; dokument se znovu použije při každém vytvoření nebo otevření jiného dokumentu. Voláním této funkce implementujete příkaz Upravit vymazat vše nebo podobný příkaz, který odstraní všechna data dokumentu. Výchozí implementace této funkce nic nedělá. Přepište tuto funkci, aby se odstranila data v dokumentu.
Příklad
// This example is the handler for an Edit Clear All command.
void CExampleDoc::OnEditClearAll()
{
DeleteContents();
UpdateAllViews(NULL);
}
void CExampleDoc::DeleteContents()
{
// Re-initialize document data here.
}
CDocument::FindChunk
Vyhledá blok dat se zadaným identifikátorem GUID.
virtual POSITION FindChunk(
REFCLSID guid,
DWORD pid);
Parametry
guid
Určuje identifikátor GUID bloku dat, který se má najít.
pid
Určuje PID bloku dat, který se má najít.
Návratová hodnota
Umístění v interním seznamu bloků dat v případě úspěchu Jinak NULL
.
Poznámky
CDocument::GetAdapter
Vrátí ukazatel na objekt, který implementuje IDocument
rozhraní.
virtual ATL::IDocument* GetAdapter();
Návratová hodnota
Ukazatel na objekt implementuje IDocument
rozhraní.
Poznámky
CDocument::GetDocTemplate
Voláním této funkce získáte ukazatel na šablonu dokumentu pro tento typ dokumentu.
CDocTemplate* GetDocTemplate() const;
Návratová hodnota
Ukazatel na šablonu dokumentu pro tento typ dokumentu nebo hodnotu NULL, pokud dokument není spravován šablonou dokumentu.
Příklad
// This example accesses the doc template object to construct
// a default document name such as SHEET.XLS, where "sheet"
// is the base document name and ".xls" is the file extension
// for the document type.
CString strDefaultDocName, strBaseName, strExt;
CDocTemplate *pDocTemplate = GetDocTemplate();
if (!pDocTemplate->GetDocString(strBaseName, CDocTemplate::docName) || !pDocTemplate->GetDocString(strExt, CDocTemplate::filterExt))
{
AfxThrowUserException(); // These doc template strings will
// be available if you created the application using AppWizard
// and specified the file extension as an option for
// the document class produced by AppWizard.
}
strDefaultDocName = strBaseName + strExt;
CDocument::GetFile
Voláním této členské funkce získáte ukazatel na CFile
objekt.
virtual CFile* GetFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError);
Parametry
lpszFileName
Řetězec, který je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní.
pError
Ukazatel na existující objekt výjimky souboru, který označuje stav dokončení operace.
nOpenFlags
Režim sdílení a přístupu Určuje akci, která se má provést při otevření souboru. Možnosti uvedené v konstruktoru CFile::CFile
CFile můžete kombinovat pomocí bitové operátoru OR (|
). Vyžaduje se jedno oprávnění přístupu a jedna možnost sdílení; a modeCreate
modeNoInherit
režimy jsou volitelné.
Návratová hodnota
Ukazatel na CFile
objekt.
CDocument::GetFirstViewPosition
Voláním této funkce získáte pozici prvního zobrazení v seznamu zobrazení přidružených k dokumentu.
virtual POSITION GetFirstViewPosition() const;
Návratová hodnota
Hodnota POSITION
, kterou lze použít pro iteraci s členovou GetNextView
funkcí.
Příklad
//To get the first view in the list of views:
//To get the first view in the list of views:
// POSITION pos = GetFirstViewPosition();
// CView* pFirstView = GetNextView(pos);
//
// This example uses CDocument::GetFirstViewPosition
// and GetNextView to repaint each view.
// An easier way to accomplish the same result is to call
// UpdateAllViews(NULL);
void CExampleDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView *pView = GetNextView(pos);
pView->UpdateWindow();
}
}
CDocument::GetNextView
Voláním této funkce provedete iteraci ve všech zobrazeních dokumentu.
virtual CView* GetNextView(POSITION& rPosition) const;
Parametry
rPosition
Odkaz na POSITION
hodnotu vrácenou předchozím voláním GetNextView
nebo GetFirstViewPosition
členské funkce. Tato hodnota nesmí být NULL
.
Návratová hodnota
Ukazatel na zobrazení identifikovaný uživatelem rPosition
.
Poznámky
Funkce vrátí zobrazení identifikované a rPosition
pak nastaví rPosition
POSITION
hodnotu dalšího zobrazení v seznamu. Pokud je načtené zobrazení poslední v seznamu, rPosition
je nastaveno na NULL
hodnotu .
Příklad
//To get the first view in the list of views:
//To get the first view in the list of views:
// POSITION pos = GetFirstViewPosition();
// CView* pFirstView = GetNextView(pos);
//
// This example uses CDocument::GetFirstViewPosition
// and GetNextView to repaint each view.
// An easier way to accomplish the same result is to call
// UpdateAllViews(NULL);
void CExampleDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView *pView = GetNextView(pos);
pView->UpdateWindow();
}
}
CDocument::GetPathName
Voláním této funkce získáte plně kvalifikovanou cestu k souboru disku dokumentu.
const CString& GetPathName() const;
Návratová hodnota
Cesta k dokumentu je plně kvalifikovaná. Tento řetězec je prázdný, pokud nebyl dokument uložen nebo nemá přidružený diskový soubor.
CDocument::GetThumbnail
Vytvoří rastrový obrázek, který bude používat poskytovatel miniatur k zobrazení miniatury.
virtual BOOL GetThumbnail(
UINT cx,
HBITMAP* phbmp,
DWORD* pdwAlpha);
Parametry
cx
Určuje šířku a výšku rastrového obrázku.
phbmp
Obsahuje popisovač rastrového obrázku, když funkce úspěšně vrátí.
pdwAlpha
DWORD
Obsahuje zadání hodnoty alfa kanálu, když funkce úspěšně vrátí.
Návratová hodnota
Vrátí TRUE
, pokud byl rastrový obrázek pro miniaturu úspěšně vytvořen; v opačném případě FALSE
.
Poznámky
CDocument::GetTitle
Voláním této funkce získáte název dokumentu, který je obvykle odvozený z názvu souboru dokumentu.
const CString& GetTitle() const;
Návratová hodnota
Název dokumentu.
CDocument::InitializeSearchContent
Volá se k inicializaci vyhledávacího obsahu pro obslužnou rutinu vyhledávání.
virtual void InitializeSearchContent ();
Poznámky
Přepište tuto metodu v odvozené třídě pro inicializaci obsahu vyhledávání. Obsah by měl být řetězec s částmi oddělenými znakem ;. Například "point; obdélník; ole item".
CDocument::IsModified
Voláním této funkce určíte, jestli byl dokument od posledního uložení změněn.
virtual BOOL IsModified();
Návratová hodnota
Nenulové, pokud byl dokument změněn od posledního uložení; jinak 0.
CDocument::IsSearchAndOrganizeHandler
Určuje, zda byla tato instance vytvořena pro obslužnou rutinu CDocument
Vyhledávání a uspořádání.
BOOL IsSearchAndOrganizeHandler() const;
Návratová hodnota
Vrátí TRUE
, pokud byla tato instance CDocument
vytvořena pro obslužnou rutinu Vyhledávání a uspořádání.
Poznámky
V současné době tato funkce vrací pouze TRUE
obslužné rutiny rich preview implementované na mimo procesový server. Můžete nastavit příslušné příznaky (m_bPreviewHandlerMode
, m_bSearchMode
, m_bGetThumbnailMode
) na úrovni aplikace, aby tato funkce vrátila TRUE
.
CDocument::LoadDocumentFromStream
Volána pro načtení dat dokumentu ze streamu.
virtual HRESULT LoadDocumentFromStream(
IStream* pStream,
DWORD dwGrfMode);
Parametry
pStream
Ukazatel na datový proud. Tento datový proud poskytuje prostředí.
dwGrfMode
Režim přístupu ke streamu
Návratová hodnota
S_OK
pokud operace načítání proběhne úspěšně, jinak HRESULT
s kódem chyby.
Poznámky
Tuto metodu můžete přepsat v odvozené třídě a přizpůsobit tak, jak načíst data z datového proudu.
CDocument::m_bGetThumbnailMode
Určuje, že CDocument
objekt byl vytvořen knihovnou dllhost pro miniatury. Měla by být vrácena CView::OnDraw
se změnami .
BOOL m_bGetThumbnailMode;
Poznámky
TRUE
označuje, že dokument byl vytvořen knihovnou dllhost pro miniatury.
CDocument::m_bPreviewHandlerMode
Určuje, že CDocument
objekt byl vytvořen prevhost pro Rich Preview. Měla by být vrácena CView::OnDraw
se změnami .
BOOL m_bPreviewHandlerMode;
Poznámky
TRUE
označuje, že dokument byl vytvořen prevhost pro Rich Preview.
CDocument::m_bSearchMode
Určuje, že CDocument
objekt byl vytvořen indexerem nebo jinou vyhledávací aplikací.
BOOL m_bSearchMode;
Poznámky
TRUE
označuje, že dokument byl vytvořen indexerem nebo jinou vyhledávací aplikací.
CDocument::m_clrRichPreviewBackColor
Určuje barvu pozadí okna náhledu s formátováním. Tato barva je nastavena hostitelem.
COLORREF m_clrRichPreviewBackColor;
Poznámky
CDocument::m_clrRichPreviewTextColor
Určuje barvu popředí okna náhledu s formátováním. Tato barva je nastavena hostitelem.
COLORREF m_clrRichPreviewTextColor;
Poznámky
CDocument::m_lfRichPreviewFont
Určuje písmo textu pro okno náhledu ve formátu RTF. Tyto informace o písmu jsou nastaveny hostitelem.
CFont m_lfRichPreviewFont;
Poznámky
CDocument::OnBeforeRichPreviewFontChanged
Volá se před změnou písma Rich Preview.
virtual void OnBeforeRichPreviewFontChanged();
Poznámky
CDocument::OnChangedViewList
Volá se rozhraním po přidání nebo odebrání zobrazení z dokumentu.
virtual void OnChangedViewList();
Poznámky
Výchozí implementace této funkce zkontroluje, jestli je odebráno poslední zobrazení, a pokud ano, odstraní dokument. Tuto funkci přepište, pokud chcete provést speciální zpracování, když architektura přidá nebo odebere zobrazení. Pokud například chcete, aby dokument zůstal otevřený i v případě, že k němu nejsou připojená žádná zobrazení, přepište tuto funkci.
CDocument::OnCloseDocument
Volá se rozhraním při zavření dokumentu, obvykle jako součást příkazu Zavřít soubor.
virtual void OnCloseDocument();
Poznámky
Výchozí implementace této funkce zničí všechny rámce použité k zobrazení dokumentu, zavře zobrazení, vyčistí obsah dokumentu a potom zavolá DeleteContents
členskou funkci, která odstraní data dokumentu.
Tuto funkci přepište, pokud chcete provést speciální zpracování čištění při zavření dokumentu rozhraním. Pokud například dokument představuje záznam v databázi, můžete tuto funkci přepsat a zavřít databázi. Měli byste volat verzi základní třídy této funkce z přepsání.
CDocument::OnCreatePreviewFrame
Volal ho architektura, když potřebuje vytvořit rámec náhledu pro Rich Preview.
virtual BOOL OnCreatePreviewFrame();
Návratová hodnota
Vrátí TRUE
, pokud je rámec úspěšně vytvořen; jinak FALSE
.
Poznámky
CDocument::OnDocumentEvent
Volá se rozhraním v reakci na událost dokumentu.
virtual void OnDocumentEvent(DocumentEvent deEvent);
Parametry
deEvent
[v] Výčtový datový typ, který popisuje typ události.
Poznámky
Události dokumentu můžou mít vliv na více tříd. Tato metoda zodpovídá za zpracování událostí dokumentu, které ovlivňují jiné třídy než CDocument
třídy. V současné době je jedinou třídou, která musí reagovat na události dokumentu, třídaCDataRecoveryHandler
. Třída CDocument
má další přepisovatelné metody zodpovědné za zpracování účinku na CDocument
.
Následující tabulka uvádí možné hodnoty a deEvent
události, které odpovídají.
Hodnota | Odpovídající událost |
---|---|
onAfterNewDocument |
Byl vytvořen nový dokument. |
onAfterOpenDocument |
Byl otevřen nový dokument. |
onAfterSaveDocument |
Dokument byl uložen. |
onAfterCloseDocument |
Dokument byl zavřený. |
CDocument::OnDrawThumbnail
Přepište tuto metodu v odvozené třídě a nakreslete miniaturu.
virtual void OnDrawThumbnail(
CDC& dc,
LPRECT lprcBounds);
Parametry
dc
Odkaz na kontext zařízení
lprcBounds
Určuje ohraničující obdélník oblasti, ve které se má miniatura nakreslit.
Poznámky
CDocument::OnFileSendMail
Odešle zprávu prostřednictvím rezidentního poštovního hostitele (pokud existuje) s dokumentem jako přílohou.
void OnFileSendMail();
Poznámky
OnFileSendMail
volání OnSaveDocument
k serializaci (uložení) bez názvu a změněných dokumentů do dočasného souboru, který se pak odešle prostřednictvím elektronické pošty. Pokud dokument nebyl změněn, není nutný dočasný soubor; původní je odeslán. OnFileSendMail
načte MAPI32.DLL, pokud ještě nebyl načten.
Speciální implementace OnFileSendMail
pro COleDocument
zpracování složených souborů správně.
CDocument
podporuje odesílání dokumentu e-mailem, pokud je k dispozici podpora pošty (MAPI). Přečtěte si články o tématech MAPI a podpoře MAPI v prostředí MFC.
CDocument::OnLoadDocumentFromStream
Volá se rozhraním, když potřebuje načíst data dokumentu z datového proudu.
virtual HRESULT OnLoadDocumentFromStream(
IStream* pStream,
DWORD grfMode);
Parametry
pStream
Ukazatel na příchozí datový proud.
grfMode
Režim přístupu ke streamu
Návratová hodnota
S_OK
pokud je zatížení úspěšné; jinak kód chyby.
Poznámky
CDocument::OnNewDocument
Volá se rozhraním jako součást příkazu File New ( Nový soubor).
virtual BOOL OnNewDocument();
Návratová hodnota
Nenulové, pokud byl dokument úspěšně inicializován; jinak 0.
Poznámky
Výchozí implementace této funkce volá DeleteContents
člena, aby se zajistilo, že dokument je prázdný a pak označí nový dokument jako čistý. Tuto funkci přepište tak, aby inicializovala datovou strukturu pro nový dokument. Měli byste volat verzi základní třídy této funkce z přepsání.
Pokud uživatel zvolí příkaz Nový soubor v aplikaci SDI, architektura použije tuto funkci k opětovné inicializaci existujícího dokumentu místo vytvoření nového dokumentu. Pokud uživatel zvolí File New v aplikaci s více rozhraními dokumentů (MDI), architektura pokaždé vytvoří nový dokument a potom zavolá tuto funkci, aby ji inicializovala. Inicializační kód musíte umístit do této funkce místo do konstruktoru, aby příkaz File New byl efektivní v aplikacích SDI.
Všimněte si, že existují případy, kdy OnNewDocument
se volá dvakrát. K tomu dochází, když je dokument vložen jako server dokumentů ActiveX. Funkce je nejprve volána metodou CreateInstance
(vystavenou COleObjectFactory
-odvozenou třídou) a podruhé metodou InitNew
(vystavenou COleServerDoc
-odvozenou třídou).
Příklad
Následující příklady ilustrují alternativní metody inicializace objektu dokumentu.
// Method 1: In an MDI application, the simplest place to do
// initialization is in the document constructor. The framework
// always creates a new document object for File New or File Open.
CExampleDoc::CExampleDoc()
{
// Do initialization of MDI document here.
}
// Method 2: In an SDI or MDI application, do all initialization
// in an override of OnNewDocument, if you are certain that
// the initialization is effectively saved upon File Save
// and fully restored upon File Open, via serialization.
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
// Do initialization of new document here.
return TRUE;
}
// Method 3: If the initialization of your document is not
// effectively saved and restored by serialization (during File Save
// and File Open), then implement the initialization in single
// function (named InitMyDocument in this example). Call the
// shared initialization function from overrides of both
// OnNewDocument and OnOpenDocument.
BOOL CExampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
// If your new document object requires additional initialization
// not necessary when the document is deserialized via File Open,
// then perform that additional initialization here.
return TRUE;
}
CDocument::OnOpenDocument
Volá se rozhraním jako součást příkazu Otevřít soubor.
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
Parametry
lpszPathName
Odkazuje na cestu k dokumentu, který se má otevřít.
Návratová hodnota
Nenulové, pokud byl dokument úspěšně načten; jinak 0.
Poznámky
Výchozí implementace této funkce otevře zadaný soubor, zavolá DeleteContents
členskou funkci, aby se zajistilo, že dokument je prázdný, volání CObject::Serialize
ke čtení obsahu souboru a poté označí dokument jako čistý. Tuto funkci přepište, pokud chcete použít něco jiného než mechanismus archivace nebo mechanismus souborů. Můžete například napsat aplikaci, ve které dokumenty představují záznamy v databázi místo samostatných souborů.
Pokud uživatel zvolí příkaz Otevřít soubor v aplikaci SDI, architektura použije tuto funkci k opětovné inicializaci existujícího CDocument
objektu místo vytvoření nového objektu. Pokud uživatel zvolí Soubor Otevřít v aplikaci MDI, architektura pokaždé vytvoří nový CDocument
objekt a pak zavolá tuto funkci, aby ji inicializoval. Inicializační kód musíte umístit do této funkce místo do konstruktoru, aby příkaz Otevřít soubor byl efektivní v aplikacích SDI.
Příklad
Následující příklady ilustrují alternativní metody inicializace objektu dokumentu.
// Method 1: In an MDI application, the simplest place to do
// initialization is in the document constructor. The framework
// always creates a new document object for File New or File Open.
CExampleDoc::CExampleDoc()
{
// Do initialization of MDI document here.
}
// Method 2: In an SDI or MDI application, do all initialization
// in an override of OnNewDocument, if you are certain that
// the initialization is effectively saved upon File Save
// and fully restored upon File Open, via serialization.
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
// Do initialization of new document here.
return TRUE;
}
// Method 3: If the initialization of your document is not
// effectively saved and restored by serialization (during File Save
// and File Open), then implement the initialization in single
// function (named InitMyDocument in this example). Call the
// shared initialization function from overrides of both
// OnNewDocument and OnOpenDocument.
BOOL CExampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
// If your new document object requires additional initialization
// not necessary when the document is deserialized via File Open,
// then perform that additional initialization here.
return TRUE;
}
// Additional example of OnOpenDocument()
BOOL CExampleDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
return TRUE;
}
CDocument::OnPreviewHandlerQueryFocus
Nasměruje obslužnou rutinu náhledu tak, aby vrátila načtenou HWND
z volání GetFocus
funkce.
virtual HRESULT OnPreviewHandlerQueryFocus(HWND* phwnd);
Parametry
phwnd
[ven] Pokud tato metoda vrátí, obsahuje ukazatel na HWND vrácený voláním GetFocus
funkce z vlákna popředí obslužné rutiny náhledu.
Návratová hodnota
Vrátí S_OK
hodnotu, pokud je úspěšná, nebo chybovou hodnotu v opačném případě.
Poznámky
CDocument::OnPreviewHandlerTranslateAccelerator
Nasměruje obslužnou rutinu náhledu tak, aby zpracovávala stisknutí kláves předané z pumpy zprávy procesu, ve kterém je spuštěná obslužná rutina náhledu.
virtual HRESULT OnPreviewHandlerTranslateAccelerator(MSG* pmsg);
Parametry
pmsg
[v] Ukazatel na zprávu okna
Návratová hodnota
Pokud lze zprávu stisknutí kláves zpracovat obslužnou rutinou náhledu, obslužná rutina ji zpracuje a vrátí S_OK
. Pokud obslužná rutina náhledu nemůže zpracovat zprávu stisknutí kláves, nabídne ji hostiteli prostřednictvím IPreviewHandlerFrame::TranslateAccelerator
. Pokud hostitel zpracuje zprávu, tato metoda vrátí S_OK
. Pokud hostitel nezpracuje zprávu, tato metoda vrátí S_FALSE
.
Poznámky
CDocument::OnRichPreviewBackColorChanged
Volá se při změně barvy pozadí s formátem RTF.
virtual void OnRichPreviewBackColorChanged();
Poznámky
CDocument::OnRichPreviewFontChanged
Volá se, když se změnilo písmo Rich Preview.
virtual void OnRichPreviewFontChanged();
Poznámky
CDocument::OnRichPreviewSiteChanged
Volá se při změně webu s bohatým náhledem.
virtual void OnRichPreviewSiteChanged();
Poznámky
CDocument::OnRichPreviewTextColorChanged
Volá se při změně barvy textu ve formátu RTF.
virtual void OnRichPreviewTextColorChanged();
Poznámky
CDocument::OnSaveDocument
Volá se rozhraním jako součást příkazu Uložit soubor nebo Uložit jako.
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
Parametry
lpszPathName
Odkazuje na plně kvalifikovanou cestu, do které se má soubor uložit.
Návratová hodnota
Nenulové, pokud byl dokument úspěšně uložen; jinak 0.
Poznámky
Výchozí implementace této funkce otevře zadaný soubor, volání CObject::Serialize
pro zápis dat dokumentu do souboru a poté označí dokument jako čistý. Tuto funkci přepište, pokud chcete provést speciální zpracování při uložení dokumentu rozhraním. Můžete například napsat aplikaci, ve které dokumenty představují záznamy v databázi místo samostatných souborů.
CDocument::OnUnloadHandler
Volá se rozhraním při uvolnění obslužné rutiny preview.
virtual void OnUnloadHandler();
Poznámky
CDocument::OnUpdateFileSendMail
ID_FILE_SEND_MAIL
Povolí příkaz, pokud je k dispozici podpora pošty (MAPI).
void OnUpdateFileSendMail(CCmdUI* pCmdUI);
Parametry
pCmdUI
Ukazatel na CCmdUI
objekt přidružený k ID_FILE_SEND_MAIL
příkazu.
Poznámky
V opačném případě funkce odebere ID_FILE_SEND_MAIL
příkaz z nabídky, včetně oddělovačů nad nebo pod položkou nabídky podle potřeby. MapI je povoleno, pokud MAPI32.DLL
je v cestě a v části WIN.INI
[Pošta] souboru MAPI=1. Většina aplikací tento příkaz umístí do nabídky Soubor.
CDocument
podporuje odesílání dokumentu e-mailem, pokud je k dispozici podpora pošty (MAPI). Přečtěte si články o tématech MAPI a podpoře MAPI v prostředí MFC.
CDocument::PreCloseFrame
Tato členová funkce je volána architekturou před zničením okna rámce.
virtual void PreCloseFrame(CFrameWnd* pFrame);
Parametry
pFrame
Ukazatel na CFrameWnd
přidružený CDocument
objekt.
Poznámky
Lze ji přepsat, aby poskytovala vlastní vyčištění, ale nezapomeňte také volat základní třídu.
Výchozí hodnota PreCloseFrame
nedělá nic v CDocument
. Odvozené CDocument
třídy COleDocument
a CRichEditDoc
používají tuto členovou funkci.
CDocument::ReadNextChunkValue
Přečte další hodnotu bloku.
virtual BOOL ReadNextChunkValue(IFilterChunkValue** ppValue);
Parametry
ppValue
[ven] Když funkce vrátí hodnotu, ppValue
která byla načtena.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
CDocument::ReleaseFile
Tato členová funkce je volána architekturou k vydání souboru, aby byla k dispozici pro použití jinými aplikacemi.
virtual void ReleaseFile(
CFile* pFile,
BOOL bAbort);
Parametry
pFile
Ukazatel na objekt, CFile
který se má uvolnit.
bAbort
Určuje, zda má být soubor vydán pomocí nebo CFile::Close
CFile::Abort
. FALSE
je-li soubor vydán pomocí CFile::Close
; TRUE
pokud je soubor vydán pomocí CFile::Abort
.
Poznámky
Pokud bAbort
je TRUE
, ReleaseFile
volání CFile::Abort
a soubor se uvolní. CFile::Abort
nevyvolá výjimku.
Pokud bAbort
je FALSE
, ReleaseFile
volání CFile::Close
a soubor se uvolní.
Přepište tuto členovou funkci tak, aby před vydáním souboru vyžadovala akci uživatele.
CDocument::RemoveChunk
Odebere blok dat se zadaným GUID
textem .
virtual void RemoveChunk(
REFCLSID guid,
DWORD pid);
Parametry
Guid
Určuje GUID
blok dat, který se má odebrat.
Pid
Určuje PID
blok dat, který se má odebrat.
Poznámky
CDocument::RemoveView
Voláním této funkce odpojete zobrazení z dokumentu.
void RemoveView(CView* pView);
Parametry
pView
Odkazuje na odebrané zobrazení.
Poznámky
Tato funkce odebere zadané zobrazení ze seznamu zobrazení přidružených k dokumentu; nastaví také ukazatel dokumentu zobrazení na NULL
. Tato funkce je volána architekturou, když je okno rámečku zavřené nebo podokno rozdělovače je uzavřeno.
Tuto funkci zavolejte jenom v případě, že zobrazení odpojíte ručně. Obvykle necháte architekturu odpojit dokumenty a zobrazení definováním objektu CDocTemplate
pro přidružení třídy dokumentu, třídy zobrazení a třídy okna rámečku.
Podívejte se na AddView
příklad ukázkové implementace.
CDocument::ReportSaveLoadException
Volá se, pokud se při ukládání nebo načítání dokumentu vyvolá výjimka (obvykle CFileException
a nebo CArchiveException
).
virtual void ReportSaveLoadException(
LPCTSTR lpszPathName,
CException* e,
BOOL bSaving,
UINT nIDPDefault);
Parametry
lpszPathName
Odkazuje na název dokumentu, který byl uložen nebo načten.
e
Odkazuje na výjimku, která byla vyvolán. Může být NULL
.
bSaving
Příznak označující, jaká operace probíhala; nenulové, pokud byl dokument uložen, 0, pokud byl dokument načten.
nIDPDefault
Identifikátor chybové zprávy, která se má zobrazit, pokud funkce neurčovala konkrétnější.
Poznámky
Výchozí implementace zkoumá objekt výjimky a hledá chybovou zprávu, která konkrétně popisuje příčinu. Pokud se konkrétní zpráva nenajde nebo pokud e
je NULL
, použije se obecná zpráva zadaná parametrem nIDPDefault
. Funkce pak zobrazí pole se zprávou obsahující chybovou zprávu. Tuto funkci přepište, pokud chcete poskytnout další přizpůsobené chybové zprávy. Jedná se o pokročilý přepis.
CDocument::SaveModified
Volá se rozhraním před uzavřením upraveného dokumentu.
virtual BOOL SaveModified();
Návratová hodnota
Nenulové, pokud je bezpečné pokračovat a zavřít dokument; 0, pokud by dokument neměl být zavřený.
Poznámky
Výchozí implementace této funkce zobrazí okno se zprávou s dotazem, zda má uživatel uložit změny v dokumentu, pokud byly provedeny. Tuto funkci přepište, pokud váš program vyžaduje jiný postup výzvy. Jedná se o pokročilý přepis.
CDocument::SetChunkValue
Nastaví hodnotu bloku dat.
virtual BOOL SetChunkValue (IFilterChunkValue* pValue);
Parametry
pValue
Určuje hodnotu bloku dat, která se má nastavit.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
CDocument::SetModifiedFlag
Volání této funkce po provedení jakýchkoli úprav dokumentu.
virtual void SetModifiedFlag(BOOL bModified = TRUE);
Parametry
bModified
Příznak označující, jestli byl dokument změněn.
Poznámky
Voláním této funkce konzistentně zajistíte, aby architektura před zavřením dokumentu vyzve uživatele k uložení změn. Obvykle byste měli použít výchozí hodnotu TRUE
parametru bModified
. Pokud chcete dokument označit jako čistý (neupravený), zavolejte tuto funkci s hodnotou FALSE
.
CDocument::SetPathName
Voláním této funkce určíte plně kvalifikovanou cestu k souboru disku dokumentu.
virtual void SetPathName(
LPCTSTR lpszPathName,
BOOL bAddToMRU = TRUE);
Parametry
lpszPathName
Odkazuje na řetězec, který se má použít jako cesta k dokumentu.
bAddToMRU
Určuje, zda je název souboru přidán do seznamu naposledy použitých souborů (MRU). Pokud TRUE
se přidá název souboru, pokud FALSE
se nepřidá.
Poznámky
V závislosti na hodnotě bAddToMRU
cesty se přidá nebo nepřidá do seznamu MRU, který aplikace udržuje. Všimněte si, že některé dokumenty nejsou přidružené k souboru disku. Tuto funkci zavolejte pouze v případě, že přepisujete výchozí implementaci pro otevírání a ukládání souborů používaných architekturou.
CDocument::SetTitle
Voláním této funkce určíte název dokumentu (řetězec zobrazený v záhlaví okna rámečku).
virtual void SetTitle(LPCTSTR lpszTitle);
Parametry
lpszTitle
Odkazuje na řetězec, který se má použít jako název dokumentu.
Poznámky
Voláním této funkce se aktualizují názvy všech oken s rámečkem, která dokument zobrazují.
CDocument::UpdateAllViews
Volání této funkce po úpravě dokumentu
void UpdateAllViews(
CView* pSender,
LPARAM lHint = 0L,
CObject* pHint = NULL);
Parametry
pSender
Odkazuje na zobrazení, které dokument upravilo, nebo NULL
pokud se mají aktualizovat všechna zobrazení.
lHint
Obsahuje informace o úpravě.
pHint
Odkazuje na objekt, který ukládá informace o úpravě.
Poznámky
Tuto funkci byste měli volat po volání SetModifiedFlag
členské funkce. Tato funkce informuje každé zobrazení připojené k dokumentu s výjimkou zobrazení určeného uživatelem pSender
, že byl dokument změněn. Tuto funkci obvykle voláte z třídy zobrazení poté, co uživatel změnil dokument prostřednictvím zobrazení.
Tato funkce volá CView::OnUpdate
členskou funkci pro každé zobrazení dokumentu s výjimkou odesílajícího zobrazení, předávání pHint
a lHint
. Pomocí těchto parametrů předejte informace zobrazením o změnách dokumentu. Informace můžete kódovat pomocí lHint
a/nebo můžete definovat -odvozenou CObject
třídu k uložení informací o úpravách a předání objektu této třídy pomocí pHint
. Přepište členskou CView::OnUpdate
funkci ve vaší CView
-odvozené třídě, aby se optimalizovala aktualizace zobrazení na základě předaných informací.
Příklad
void CExampleDoc::OnUpdateAllViews()
{
UpdateAllViews(NULL);
}
Viz také
Mfc – ukázka MDIDOCVW
Mfc – ukázka SNAPVW
Mfc – ukázka NPP
CCmdTarget
Třída
Graf hierarchie
CCmdTarget
Třída
CView
Třída
CDocTemplate
Třída