CDataObject::CDataObject(CShellFolder *psfParent, LPCITEMIDLIST *aPidls, UINT uItemCount) { gAddRef(CDATAOBJECT); m_uItemCount = 0; m_psfParent = psfParent; if(m_psfParent) m_psfParent->AddRef(); m_ObjRefCount = 1; m_aPidls = NULL; SHGetMalloc(&m_pMalloc); if(!m_pMalloc) { delete this; return; } m_uItemCount = uItemCount; AllocPidlTable(uItemCount); if(m_aPidls) { FillPidlTable(aPidls, uItemCount); } m_cfPrivateData = RegisterClipboardFormat(CFSTR_ZENFOLDERSDATA); m_cfShellIDList = RegisterClipboardFormat(CFSTR_SHELLIDLIST); m_cfInShellDragLoop = RegisterClipboardFormat(CFSTR_INDRAGLOOP); m_cFormatEtc = 4; m_pFormatEtc = new FORMATETC[m_cFormatEtc]; SETDefFormatEtc(m_pFormatEtc[0], m_cfPrivateData, TYMED_HGLOBAL); SETDefFormatEtc(m_pFormatEtc[1], m_cfShellIDList, TYMED_HGLOBAL); SETDefFormatEtc(m_pFormatEtc[2], CF_HDROP, TYMED_HGLOBAL); SETDefFormatEtc(m_pFormatEtc[3], m_cfInShellDragLoop, TYMED_HGLOBAL); }
BOOL tOleHandler::ObjectInitialize(LPUNKNOWN pObj) { HRESULT hr; FORMATETC fe; SETDefFormatEtc(fe, 0, TYMED_NULL); LPFORMATETC pFE = &fe; if (NULL==pObj || NULL==pFE) return FALSE; m_pObj=pObj; m_fe=*pFE; m_fe.ptd=NULL; m_dwState=TENANTSTATE_DEFAULT; m_pIViewObject2=NULL; hr=pObj->QueryInterface(IID_IViewObject2 , (LPVOID*)&m_pIViewObject2); if (FAILED(hr)) return FALSE; /* * Get the MiscStatus bits and check for OLEMISC_ONLYICONIC. * If set, force dwAspect in m_fe to DVASPECT_ICON so we * remember to draw it properly and do extents right. */ m_pIOleObject->GetMiscStatus(m_fe.dwAspect, &m_grfMisc); //CHAPTER24MOD //Run the object if it says to do so if (OLEMISC_ALWAYSRUN & m_grfMisc) OleRun(pObj); //End CHAPTER24MOD //CHAPTER24MOD //Go try initializing control-related things. ControlInitialize(); //End CHAPTER24MOD return TRUE; }