// [!output DOC_IMPL] : implementazione della classe [!output DOC_CLASS] // #include "stdafx.h" #include "[!output APP_HEADER]" [!if OLEDB_RECORD_VIEW || ODBC_RECORD_VIEW] #include "[!output ROWSET_HEADER]" [!endif] #include "[!output DOC_HEADER]" [!if CONTAINER || CONTAINER_SERVER] #include "[!output CONTAINER_ITEM_HEADER]" [!endif] [!if MINI_SERVER || FULL_SERVER || CONTAINER_SERVER] #include "[!output SERVER_ITEM_HEADER]" [!endif] #ifdef _DEBUG #define new DEBUG_NEW #endif // [!output DOC_CLASS] IMPLEMENT_DYNCREATE([!output DOC_CLASS], [!output DOC_BASE_CLASS]) BEGIN_MESSAGE_MAP([!output DOC_CLASS], [!output DOC_BASE_CLASS]) [!if CONTAINER || CONTAINER_SERVER] // Attivare l'implementazione del contenitore OLE predefinito. [!if !RICH_EDIT_VIEW] ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, &[!output DOC_BASE_CLASS]::OnUpdatePasteMenu) ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE_LINK, &[!output DOC_BASE_CLASS]::OnUpdatePasteLinkMenu) ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_CONVERT, &[!output DOC_BASE_CLASS]::OnUpdateObjectVerbMenu) ON_COMMAND(ID_OLE_EDIT_CONVERT, &[!output DOC_BASE_CLASS]::OnEditConvert) [!endif] ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_LINKS, &[!output DOC_BASE_CLASS]::OnUpdateEditLinksMenu) ON_COMMAND(ID_OLE_EDIT_LINKS, &[!output DOC_BASE_CLASS]::OnEditLinks) ON_UPDATE_COMMAND_UI_RANGE(ID_OLE_VERB_FIRST, ID_OLE_VERB_LAST, &[!output DOC_BASE_CLASS]::OnUpdateObjectVerbMenu) [!endif] [!if MAPI] ON_COMMAND(ID_FILE_SEND_MAIL, &[!output DOC_CLASS]::OnFileSendMail) ON_UPDATE_COMMAND_UI(ID_FILE_SEND_MAIL, &[!output DOC_CLASS]::OnUpdateFileSendMail) [!endif] END_MESSAGE_MAP() [!if AUTOMATION] BEGIN_DISPATCH_MAP([!output DOC_CLASS], [!output DOC_BASE_CLASS]) END_DISPATCH_MAP() // Nota: viene aggiunto il supporto per IID_I[!output SAFE_PROJECT_IDENTIFIER_NAME] in modo da supportare il binding indipendente dai tipi // di VBA. Questo IID deve corrispondere al GUID che č collegato all'interfaccia di invio // contenuta nel file IDL. // {[!output DISPIID_REGISTRY_FORMAT]} static const IID IID_I[!output SAFE_PROJECT_IDENTIFIER_NAME] = [!output DISPIID_STATIC_CONST_GUID_FORMAT]; BEGIN_INTERFACE_MAP([!output DOC_CLASS], [!output DOC_BASE_CLASS]) INTERFACE_PART([!output DOC_CLASS], IID_I[!output SAFE_PROJECT_IDENTIFIER_NAME], Dispatch) END_INTERFACE_MAP() [!endif] // costruzione/eliminazione di [!output DOC_CLASS] [!output DOC_CLASS]::[!output DOC_CLASS]() { [!if SUPPORT_COMPOUND_FILES && !COMPOUND_DOC_NONE] // Utilizzare i file composti OLE EnableCompoundFile(); [!endif] // TODO: aggiungere qui il codice di costruzione unico [!if AUTOMATION] EnableAutomation(); AfxOleLockApp(); [!endif] } [!output DOC_CLASS]::~[!output DOC_CLASS]() { [!if AUTOMATION] AfxOleUnlockApp(); [!endif] } BOOL [!output DOC_CLASS]::OnNewDocument() { if (![!output DOC_BASE_CLASS]::OnNewDocument()) return FALSE; [!if APP_TYPE_SDI] [!if EDIT_VIEW] reinterpret_cast(m_viewList.GetHead())->SetWindowText(NULL); [!endif] [!endif] // TODO: aggiungere qui il codice di reinizializzazione // (nei documenti SDI verrā riutilizzato questo documento). return TRUE; } [!if RICH_EDIT_VIEW] [!output CONTAINER_ITEM_BASE_CLASS]* [!output DOC_CLASS]::CreateClientItem(REOBJECT* preo) const { return new [!output CONTAINER_ITEM_CLASS](preo, const_cast<[!output DOC_CLASS]*>(this)); } [!endif] [!if MINI_SERVER || FULL_SERVER || CONTAINER_SERVER] // implementazione server di [!output DOC_CLASS] COleServerItem* [!output DOC_CLASS]::OnGetEmbeddedItem() { // OnGetEmbeddedItem viene richiamato dal framework per ottenere COleServerItem // che č associato al documento. Viene richiamato solo quando necessario. [!output SERVER_ITEM_CLASS]* pItem = new [!output SERVER_ITEM_CLASS](this); ASSERT_VALID(pItem); return pItem; } [!endif] [!if ACTIVE_DOC_SERVER] // implementazione server del documento attivo [!output DOC_CLASS] CDocObjectServer *[!output DOC_CLASS]::GetDocObjectServer(LPOLEDOCUMENTSITE pDocSite) { return new CDocObjectServer(this, pDocSite); } [!endif] [!if !DB_VIEW_NO_FILE && !HTML_EDITVIEW] // serializzazione di [!output DOC_CLASS] void [!output DOC_CLASS]::Serialize(CArchive& ar) { [!if EDIT_VIEW] // CEditView contiene un controllo di modifica che gestisce tutta la serializzazione. reinterpret_cast(m_viewList.GetHead())->SerializeRaw(ar); [!else] if (ar.IsStoring()) { // TODO: aggiungere qui il codice di archiviazione. } else { // TODO: aggiungere qui il codice di caricamento. } [!if CONTAINER || CONTAINER_SERVER] // La chiamata della classe di base [!output DOC_BASE_CLASS] attiva la serializzazione // degli oggetti COleClientItem del documento contenitore. [!if RICH_EDIT_VIEW] // TODO: impostare CRichEditDoc::m_bRTF = FALSE se si esegue la serializzazione come testo. [!endif] [!output DOC_BASE_CLASS]::Serialize(ar); [!if ACTIVE_DOC_CONTAINER] // attiva il primo. if (!ar.IsStoring()) { POSITION posItem = GetStartPosition(); if (posItem != NULL) { CDocItem* pItem = GetNextItem(posItem); POSITION posView = GetFirstViewPosition(); COleDocObjectItem *pDocObjectItem = DYNAMIC_DOWNCAST(COleDocObjectItem, pItem); if (posView != NULL && pDocObjectItem != NULL) { CView* pView = GetNextView(posView); pDocObjectItem->DoVerb(OLEIVERB_SHOW, pView); } } } [!endif] [!endif] [!endif] } [!endif] // diagnostica di [!output DOC_CLASS] #ifdef _DEBUG void [!output DOC_CLASS]::AssertValid() const { [!output DOC_BASE_CLASS]::AssertValid(); } void [!output DOC_CLASS]::Dump(CDumpContext& dc) const { [!output DOC_BASE_CLASS]::Dump(dc); } #endif //_DEBUG // comandi di [!output DOC_CLASS]