class CDocTemplate : public CCmdTarget { DECLARE_DYNAMIC(CDocTemplate)
// Constructors protected: CDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass);
public: virtual void LoadTemplate();
// Attributes public: // setup for OLE containers void SetContainerInfo(UINT nIDOleInPlaceContainer);
// setup for OLE servers void SetServerInfo(UINT nIDOleEmbedding, UINT nIDOleInPlaceServer = 0, CRuntimeClass* pOleFrameClass = NULL, CRuntimeClass* pOleViewClass = NULL);
// iterating over open documents virtual POSITION GetFirstDocPosition() const = 0; virtual CDocument* GetNextDoc(POSITION& rPos) const = 0;
// Operations public: virtual void AddDocument(CDocument* pDoc); // must override virtual void RemoveDocument(CDocument* pDoc); // must override enum DocStringIndex { windowTitle, // default window title docName, // user visible name for default document fileNewName, // user visible name for FileNew // for file based documents: filterName, // user visible name for FileOpen filterExt, // user visible extension for FileOpen // for file based documents with Shell open support: regFileTypeId, // REGEDIT visible reGIStered file type identifier regFileTypeName, // Shell visible registered file type name }; virtual BOOL GetDocString(CString& rString, enum DocStringIndex index) const; // get one of the info strings CFrameWnd* CreateOleFrame(CWnd* pParentWnd, CDocument* pDoc,BOOL bCreateView);
// Overridables public: enum Confidence { noAttempt, maybeAttemptForeign, maybeAttemptNative, yesAttemptForeign, yesAttemptNative, yesAlreadyOpen }; virtual Confidence MatchDocType(LPCTSTR lpszPathName,CDocument*& rpDocMatch); virtual CDocument* CreateNewDocument(); virtual CFrameWnd* CreateNewFrame(CDocument* pDoc, CFrameWnd* pOther); virtual void InitialUpdateFrame(CFrameWnd* pFrame, CDocument* pDoc,BOOL bMakeVisible = TRUE); virtual BOOL SaveAllModified(); // for all documents virtual void CloseAllDocuments(BOOL bEndSession); virtual CDocument* OpenDocumentFile( LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE) = 0; // open named file // if lpszPathName == NULL => create new file with this type virtual void SetDefaultTitle(CDocument* pDocument) = 0;
// Implementation public: BOOL m_bAutoDelete; virtual ~CDocTemplate();
// back pointer to OLE or other server (NULL if none or disabled) CObject* m_pAttachedFactory;
// menu & accelerator resources for in-place container HMENU m_hMenuInPlace; HACCEL m_hAccelInPlace;
// menu & accelerator resource for server editing embedding HMENU m_hMenuEmbedding; HACCEL m_hAccelEmbedding;
// menu & accelerator resource for server editing in-place HMENU m_hMenuInPlaceServer; HACCEL m_hAccelInPlaceServer;
#ifdef _DEBUG virtual void Dump(CDumpContext&) const; virtual void AssertValid() const; #endif virtual void OnIdle(); // for all documents virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,AFX_CMDHANDLERINFO* pHandlerInfo);
protected: UINT m_nIDResource; // IDR_ for frame/menu/accel as well UINT m_nIDServerResource; // IDR_ for OLE inplace frame/menu/accel UINT m_nIDEmbeddingResource; // IDR_ for OLE open frame/menu/accel UINT m_nIDContainerResource; // IDR_ for container frame/menu/accel
CRuntimeClass* m_pDocClass; // class for creating new documents CRuntimeClass* m_pFrameClass; // class for creating new frames CRuntimeClass* m_pViewClass; // class for creating new views CRuntimeClass* m_pOleFrameClass; // class for creating in-place frame CRuntimeClass* m_pOleViewClass; // class for creating in-place view
CString m_strDocStrings; // '/n' separated names // The document names sub-strings are represented as _one_ string: // windowTitle/ndocName/n ... (see DocStringIndex enum) }; |