亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? idataobj.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
字號:
/*
 * IDATAOBJ.CPP
 * Cosmo Chapter 21
 *
 * Implementation of the IDataObject interface.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "cosmo.h"


/*
 * CImpIDataObject::CImpIDataObject
 * CImpIDataObject::~CImpIDataObject
 *
 * Parameters (Constructor):
 *  pObj            PCFigure of the object we're in.
 *  pUnkOuter       LPUNKNOWN to which we delegate.
 */

CImpIDataObject::CImpIDataObject(PCFigure pObj
    , LPUNKNOWN pUnkOuter)
    {
    m_cRef=0;
    m_pObj=pObj;
    m_pUnkOuter=pUnkOuter;
    return;
    }

CImpIDataObject::~CImpIDataObject(void)
    {
    return;
    }




/*
 * CImpIDataObject::QueryInterface
 * CImpIDataObject::AddRef
 * CImpIDataObject::Release
 */

STDMETHODIMP CImpIDataObject::QueryInterface(REFIID riid, PPVOID ppv)
    {
    return m_pUnkOuter->QueryInterface(riid, ppv);
    }

STDMETHODIMP_(ULONG) CImpIDataObject::AddRef(void)
    {
    ++m_cRef;
    return m_pUnkOuter->AddRef();
    }

STDMETHODIMP_(ULONG) CImpIDataObject::Release(void)
    {
    --m_cRef;
    return m_pUnkOuter->Release();
    }





/*
 * CImpIDataObject::GetData
 *
 * Purpose:
 *  Retrieves data described by a specific FormatEtc into a StgMedium
 *  allocated by this function.  Used like GetClipboardData.
 *
 * Parameters:
 *  pFE             LPFORMATETC describing the desired data.
 *  pSTM            LPSTGMEDIUM in which to return the data.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIDataObject::GetData(LPFORMATETC pFE
    , LPSTGMEDIUM pSTM)
    {
    UINT            cf=pFE->cfFormat;
    BOOL            fRet=FALSE;

    //Another part of us already knows if the format is good.
    if (NOERROR!=QueryGetData(pFE))
        return ResultFromScode(DATA_E_FORMATETC);

    if (CF_METAFILEPICT==cf || CF_BITMAP==cf || m_pObj->m_cf==cf)
        {
        if (CF_METAFILEPICT==cf)
            {
            pSTM->tymed=TYMED_MFPICT;
            }
        else
            pSTM->tymed=TYMED_HGLOBAL;

        pSTM->pUnkForRelease=NULL;
        pSTM->hGlobal=m_pObj->m_pDoc->RenderFormat(cf);
        fRet=(NULL!=pSTM->hGlobal);
        }
    else
        fRet=m_pObj->m_pDoc->RenderMedium(cf, pSTM);

    return fRet ? NOERROR : ResultFromScode(DATA_E_FORMATETC);
    }




/*
 * CImpIDataObject::GetDataHere
 *
 * Purpose:
 *  Renders the specific FormatEtc into caller-allocated medium
 *  provided in pSTM.
 *
 * Parameters:
 *  pFE             LPFORMATETC describing the desired data.
 *  pSTM            LPSTGMEDIUM providing the medium into which
 *                  wer render the data.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIDataObject::GetDataHere(LPFORMATETC pFE
    , LPSTGMEDIUM pSTM)
    {
    UINT        cf;
    LONG        lRet;

    /*
     * The only reasonable time this is called is for
     * CFSTR_EMBEDSOURCE and TYMED_ISTORAGE (and later for
     * CFSTR_LINKSOURCE).  This means the same as
     * IPersistStorage::Save.
     */

    cf=RegisterClipboardFormat(CFSTR_EMBEDSOURCE);

    //Aspect is unimportant to us here, as is lindex and ptd.
    if (cf==pFE->cfFormat && (TYMED_ISTORAGE & pFE->tymed))
        {
        //We have an IStorage we can write into.
        pSTM->tymed=TYMED_ISTORAGE;
        pSTM->pUnkForRelease=NULL;
        lRet=m_pObj->m_pPL->WriteToStorage(pSTM->pstg
            , VERSIONCURRENT);

        //CHAPTER21MOD
        //These are for creating an embedded object from a file
        WriteClassStg(pSTM->pstg, CLSID_CosmoFigure);
        WriteFmtUserTypeStg(pSTM->pstg, m_pObj->m_cf
            , (*m_pObj->m_pST)[IDS_USERTYPE]);
        //End CHAPTER21MOD

        if (lRet >= 0)
            return NOERROR;

        return ResultFromScode(STG_E_WRITEFAULT);
        }

    return ResultFromScode(DATA_E_FORMATETC);
    }






/*
 * CImpIDataObject::QueryGetData
 *
 * Purpose:
 *  Tests if a call to GetData with this FormatEtc will provide
 *  any rendering; used like IsClipboardFormatAvailable.
 *
 * Parameters:
 *  pFE             LPFORMATETC describing the desired data.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIDataObject::QueryGetData(LPFORMATETC pFE)
    {
    UINT            cf=pFE->cfFormat;
    UINT            i;

    //Check the aspects we support.
    if (!(DVASPECT_CONTENT & pFE->dwAspect))
        return ResultFromScode(S_FALSE);

    for (i=0; i < m_pObj->m_cfeGet; i++)
        {
        if (pFE->cfFormat==m_pObj->m_rgfeGet[i].cfFormat
            && pFE->tymed & m_pObj->m_rgfeGet[i].tymed)
            {
            return NOERROR;
            }
        }

    return ResultFromScode(S_FALSE);
    }





/*
 * CImpIDataObject::GetCanonicalFormatEtc
 *
 * Purpose:
 *  Provides the caller with an equivalent FormatEtc to the one
 *  provided when different FormatEtcs will produce exactly the
 *  same renderings.
 *
 * Parameters:
 *  pFEIn            LPFORMATETC of the first description.
 *  pFEOut           LPFORMATETC of the equal description.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIDataObject::GetCanonicalFormatEtc
    (LPFORMATETC pFEIn, LPFORMATETC pFEOut)
    {
    if (NULL==pFEOut)
        return ResultFromScode(E_INVALIDARG);

    pFEOut->ptd=NULL;
    return ResultFromScode(DATA_S_SAMEFORMATETC);
    }






/*
 * CImpIDataObject::SetData
 *
 * Purpose:
 *  Places data described by a FormatEtc and living in a StgMedium
 *  into the object.  The object may be responsible to clean up the
 *  StgMedium before exiting.
 *
 * Parameters:
 *  pFE             LPFORMATETC describing the data to set.
 *  pSTM            LPSTGMEDIUM containing the data.
 *  fRelease        BOOL indicating if this function is responsible
 *                  for freeing the data.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIDataObject::SetData(LPFORMATETC pFE
    , LPSTGMEDIUM pSTM, BOOL fRelease)
    {
    LONG            lRet;

    /*
     * Data can only come from global memory containing a
     * POLYLINEDATA structure that we send to the Polyline's
     * DataSetMem.
     */
    if ((pFE->cfFormat!=m_pObj->m_cf)
        || !(DVASPECT_CONTENT & pFE->dwAspect)
        || (TYMED_HGLOBAL!=pSTM->tymed))
        return ResultFromScode(DATA_E_FORMATETC);

    lRet=m_pObj->m_pPL->DataSetMem(pSTM->hGlobal, FALSE, TRUE
        , TRUE);

    if (fRelease)
        ReleaseStgMedium(pSTM);

    return (POLYLINE_E_NONE==lRet) ?
        NOERROR : ResultFromScode(DATA_E_FORMATETC);
    }






/*
 * CImpIDataObject::EnumFormatEtc
 *
 * Purpose:
 *  Returns an IEnumFORMATETC object through which the caller can
 *  iterate to learn about all the data formats this object can
 *  provide through either GetData[Here] or SetData.
 *
 * Parameters:
 *  dwDir           DWORD describing a data direction, either
 *                  DATADIR_SET or DATADIR_GET.
 *  ppEnum          LPENUMFORMATETC * in which to return the
 *                  pointer to the enumerator.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIDataObject::EnumFormatEtc(DWORD dwDir
    , LPENUMFORMATETC *ppEnum)
    {
    return ResultFromScode(OLE_S_USEREG);
    }





/*
 * CImpIDataObject::DAdvise
 * CImpIDataObject::DUnadvise
 * CImpIDataObject::EnumDAdvise
 *
 * Pass-throughs to IDataAdviseHolder.
 */

STDMETHODIMP CImpIDataObject::DAdvise(LPFORMATETC pFE, DWORD dwFlags
    , LPADVISESINK pIAdviseSink, LPDWORD pdwConn)
    {
    HRESULT         hr;

    if (NULL==m_pObj->m_pIDataAdviseHolder)
        {
        hr=CreateDataAdviseHolder(&m_pObj->m_pIDataAdviseHolder);

        if (FAILED(hr))
            return ResultFromScode(E_OUTOFMEMORY);
        }

    hr=m_pObj->m_pIDataAdviseHolder->Advise(this, pFE
        , dwFlags, pIAdviseSink, pdwConn);

    return hr;
    }


STDMETHODIMP CImpIDataObject::DUnadvise(DWORD dwConn)
    {
    if (NULL==m_pObj->m_pIDataAdviseHolder)
        return ResultFromScode(E_FAIL);

    return m_pObj->m_pIDataAdviseHolder->Unadvise(dwConn);
    }



STDMETHODIMP CImpIDataObject::EnumDAdvise(LPENUMSTATDATA *ppEnum)
    {
    if (NULL==m_pObj->m_pIDataAdviseHolder)
        return ResultFromScode(E_FAIL);

    return m_pObj->m_pIDataAdviseHolder->EnumAdvise(ppEnum);
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品 日韩| 九一久久久久久| 91国模大尺度私拍在线视频| 国产精品进线69影院| 99精品久久久久久| 亚洲卡通欧美制服中文| 日本韩国精品一区二区在线观看| 亚洲欧美一区二区三区孕妇| 91蜜桃视频在线| 亚洲成在线观看| 日韩色视频在线观看| 国产九九视频一区二区三区| 国产精品美女久久久久久久| 欧美性猛片aaaaaaa做受| 亚洲成a人片在线观看中文| 日韩视频一区二区三区| 国产精品一区二区免费不卡 | 国产婷婷一区二区| 99精品国产一区二区三区不卡| 一二三四区精品视频| 69堂国产成人免费视频| 激情文学综合插| 亚洲人成在线观看一区二区| 欧美人牲a欧美精品| 国产精品亚洲一区二区三区妖精 | 日本一区二区免费在线| 色视频一区二区| 精品在线亚洲视频| 亚洲欧洲av一区二区三区久久| 欧美三级韩国三级日本三斤| 国内久久婷婷综合| 欧美白人最猛性xxxxx69交| 精品黑人一区二区三区久久| 久久99精品久久久久久国产越南| 国产亚洲精久久久久久| 91黄色免费版| 精品一区二区国语对白| 国产精品美女久久久久久久| 欧美日韩久久久| 国产精品18久久久久久久久| 亚洲色图制服丝袜| 欧美亚洲综合久久| 国产白丝精品91爽爽久久| 国产精品美女久久久久aⅴ | 成人一区二区视频| 亚洲综合色区另类av| 日韩一级在线观看| 99re这里都是精品| 久久精品国产99国产精品| 精品国产三级a在线观看| 91麻豆精品秘密| 亚洲一区二区精品3399| 91精品国产乱码| 成人av网在线| 欧美bbbbb| 亚洲女子a中天字幕| 日韩欧美中文一区二区| 99视频精品在线| 视频一区中文字幕国产| 国产精品欧美一级免费| 欧美一区在线视频| 色系网站成人免费| 国产综合成人久久大片91| 亚洲丰满少妇videoshd| 中文字幕一区二区三区四区| 欧美日韩精品一区二区| 91丝袜国产在线播放| 亚洲精品视频在线观看免费| 欧美一区二区三区在线看| 国产成人高清在线| 久久国产麻豆精品| 玉足女爽爽91| 久久精品视频免费| 精品少妇一区二区| 欧美老年两性高潮| 色婷婷久久99综合精品jk白丝| 国产精品一线二线三线精华| 日本特黄久久久高潮| 亚洲自拍与偷拍| 亚洲天堂免费在线观看视频| 精品国产一区a| 日韩视频免费观看高清在线视频| 欧美三级电影网| 欧美性一二三区| 91视频com| 99久久综合99久久综合网站| 丁香网亚洲国际| 国产黄色成人av| 国产伦精品一区二区三区在线观看| 亚洲成人免费视| 亚洲成年人影院| 视频一区二区三区中文字幕| 亚洲国产精品久久久久婷婷884| 一区二区三区精品在线观看| 亚洲色图第一区| 国产精品入口麻豆原神| 欧美丰满高潮xxxx喷水动漫| 日韩一区二区高清| 日韩视频在线你懂得| 欧美久久久久免费| 欧美美女一区二区三区| 欧美精品久久久久久久多人混战 | 亚洲一区二区成人在线观看| 亚洲精品美腿丝袜| 亚洲成国产人片在线观看| 亚洲黄一区二区三区| 一区二区免费看| 午夜精品福利久久久| 男人操女人的视频在线观看欧美| 日本最新不卡在线| 日韩成人一级片| 国产在线观看一区二区| 成人av网站在线观看免费| 91欧美一区二区| 欧美色图在线观看| 欧美一级片在线看| 国产亚洲精品资源在线26u| 国产精品午夜电影| 亚洲女厕所小便bbb| 亚洲乱码国产乱码精品精98午夜| 亚洲欧美日韩成人高清在线一区| 亚洲激情第一区| 热久久久久久久| 成人丝袜高跟foot| 欧美日韩一本到| 精品国产乱子伦一区| 国产精品电影一区二区| 一区二区久久久久| 久久国产生活片100| 波多野结衣亚洲一区| 欧美人牲a欧美精品| 中文字幕精品—区二区四季| 丝袜美腿亚洲一区| 国产成人在线电影| 色噜噜狠狠色综合欧洲selulu| 777久久久精品| 国产精品九色蝌蚪自拍| 日本欧美在线观看| 丰满放荡岳乱妇91ww| 在线影院国内精品| 久久综合狠狠综合久久综合88 | 在线电影国产精品| 久久久三级国产网站| 亚洲欧洲三级电影| 亚洲午夜视频在线| 国产精品一区二区久久不卡| 日韩小视频在线观看专区| 国产精品久久一卡二卡| 久久av老司机精品网站导航| 色综合欧美在线视频区| 久久一夜天堂av一区二区三区| 夜夜亚洲天天久久| 风间由美一区二区三区在线观看 | 成人h版在线观看| 777午夜精品免费视频| 综合在线观看色| 极品少妇xxxx精品少妇偷拍| 91黄色激情网站| 国产精品美女一区二区在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅 | 自拍偷拍亚洲欧美日韩| 激情小说欧美图片| 色婷婷久久久亚洲一区二区三区| 日本一区二区不卡视频| 久久超碰97中文字幕| 777久久久精品| 亚洲国产一区二区在线播放| www.欧美日韩国产在线| 欧美xxxxx牲另类人与| 日韩国产精品久久久久久亚洲| 99久久婷婷国产综合精品| 国产午夜亚洲精品羞羞网站| 美女在线一区二区| 欧美日韩一区二区在线观看| 亚洲天堂成人在线观看| 成人午夜免费电影| 国产亚洲婷婷免费| 国产在线播精品第三| 欧美大片日本大片免费观看| 天堂一区二区在线| 欧美三级韩国三级日本三斤| 亚洲欧美经典视频| 色哟哟精品一区| 亚洲一区二区三区不卡国产欧美| 成熟亚洲日本毛茸茸凸凹| 国产欧美日韩久久| 久久国产精品色婷婷| 成人avav在线| 国产福利一区二区三区视频| 国产精品二区一区二区aⅴ污介绍| 国产成人超碰人人澡人人澡| 国产精品久久精品日日| 99re亚洲国产精品| 亚洲精品免费在线观看| 国产盗摄精品一区二区三区在线| 久久夜色精品国产欧美乱极品| 国产suv精品一区二区三区| 日本一二三四高清不卡| 欧美日韩一区 二区 三区 久久精品| 午夜视频在线观看一区二区 |