Beispiel #1
0
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);
}
Beispiel #2
0
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;
    }