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

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

?? idataobj.cpp

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


#include "dataobj.h"



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

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

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






/*
 * CImpIDataObject::QueryInterface
 * CImpIDataObject::AddRef
 * CImpIDataObject::Release
 *
 * Purpose:
 *  IUnknown members for CImpIDataObject object.
 */

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;

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

    switch (cf)
        {
        case CF_METAFILEPICT:
            if (!(TYMED_MFPICT & pFE->tymed))
                break;

            return m_pObj->RenderMetafilePict(pSTM);

        case CF_BITMAP:
            if (!(TYMED_GDI & pFE->tymed))
                break;

            return m_pObj->RenderBitmap(pSTM);

        case CF_TEXT:
            if (!(TYMED_HGLOBAL & pFE->tymed))
                break;

            return m_pObj->RenderText(pSTM);

        default:
            break;
        }

    return 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)
    {
    return ResultFromScode(E_NOTIMPL);
    }






/*
 * 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;
    BOOL            fRet=FALSE;

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

    switch (cf)
        {
        case CF_METAFILEPICT:
            fRet=(BOOL)(pFE->tymed & TYMED_MFPICT);
            break;

        case CF_BITMAP:
            fRet=(BOOL)(pFE->tymed & TYMED_GDI);
            break;

        case CF_TEXT:
            fRet=(BOOL)(pFE->tymed & TYMED_HGLOBAL);
            break;

        default:
            fRet=FALSE;
            break;
        }

    return fRet ? NOERROR : 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)
    {
    return 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)
    {
    switch (dwDir)
        {
        case DATADIR_GET:
            *ppEnum=new CEnumFormatEtc(m_pObj->m_cfeGet
                , m_pObj->m_rgfeGet);
            break;

        case DATADIR_SET:
            *ppEnum=NULL;
            break;

        default:
            *ppEnum=NULL;
            break;
        }

    if (NULL==*ppEnum)
        return ResultFromScode(E_FAIL);
    else
        (*ppEnum)->AddRef();

    return NOERROR;
    }





/*
 * CImpIDataObject::DAdvise
 *
 * Purpose:
 *  Provides the data object with an IAdviseSink object that we are
 *  responsible to notify when the data changes.
 *
 * Parameters:
 *  ppFE            LPFORMATETC
 *  dwFlags         DWORD carrying flags indicating how the advise
 *                  sink wants to be treated.
 *  pIAdviseSink    LPADVISESINK to the object to notify.
 *  pdwConn         LPDWORD into which we store a DWORD key
 *                  identifying the advise connection.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

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((LPDATAOBJECT)this, pFE
        , dwFlags, pIAdviseSink, pdwConn);

    return hr;
    }






/*
 * CImpIDataObject::DUnadvise
 *
 * Purpose:
 *  Turns off advising previously set up with Advise.
 *
 * Parameters:
 *  dwConn          DWORD connection key returned from Advise.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIDataObject::DUnadvise(DWORD dwConn)
    {
    HRESULT         hr;

    if (NULL==m_pObj->m_pIDataAdviseHolder)
        return ResultFromScode(E_FAIL);

    hr=m_pObj->m_pIDataAdviseHolder->Unadvise(dwConn);

    return hr;
    }






/*
 * CImpIDataObject::EnumDAdvise
 *
 * Purpose:
 *  Returns an enumerator object through which the caller can find
 *  all the agents currently receiving advises on this data object.
 *
 * Parameters:
 *  ppEnum          LPENUMSTATDATA * in which to return the
 *                  enumerator.
 *
 * Return Value:
 *  HRESULT         NOERROR or a general error value.
 */

STDMETHODIMP CImpIDataObject::EnumDAdvise(LPENUMSTATDATA *ppEnum)
    {
    HRESULT         hr;

    if (NULL==m_pObj->m_pIDataAdviseHolder)
        return ResultFromScode(E_FAIL);

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性久久久久久久久| 99视频超级精品| 2023国产一二三区日本精品2022| 青青青伊人色综合久久| 精品日产卡一卡二卡麻豆| 国产综合色在线| 国产精品三级av在线播放| 99这里只有久久精品视频| 亚洲视频一区二区在线| 欧美在线三级电影| 秋霞午夜av一区二区三区| 精品1区2区在线观看| 成人午夜激情片| 亚洲一区在线观看网站| 亚洲人一二三区| 国产欧美日韩卡一| 久久久久99精品国产片| 日韩免费成人网| 91社区在线播放| 国产成人综合在线播放| 国内精品免费**视频| 91最新地址在线播放| 精品中文字幕一区二区小辣椒| 天天色 色综合| 亚洲精品国产品国语在线app| 亚洲欧美日韩国产中文在线| 中文字幕一区免费在线观看| 久久影院午夜片一区| 欧美视频一区二| 91麻豆国产福利精品| 粉嫩蜜臀av国产精品网站| 精品亚洲国产成人av制服丝袜| 亚洲福中文字幕伊人影院| 亚洲国产欧美在线| 99国产精品久久久| 日本一区二区高清| 日韩精品乱码免费| 国产在线精品一区在线观看麻豆| 蜜桃av一区二区三区电影| 日韩av在线免费观看不卡| 青娱乐精品视频| 免费观看久久久4p| av在线不卡免费看| 中文字幕欧美日韩一区| 中文字幕亚洲在| 欧美高清激情brazzers| 丁香婷婷综合网| 午夜视频一区二区| 欧美激情艳妇裸体舞| 欧美日韩精品一区二区天天拍小说 | 日韩一区二区视频在线观看| 丁香婷婷综合网| 日本vs亚洲vs韩国一区三区二区| 中文字幕高清一区| 欧美一级在线观看| 色哟哟在线观看一区二区三区| 黄色小说综合网站| 亚洲自拍偷拍图区| 国产日产欧美一区| 日韩一区二区三区电影| 91国在线观看| 成人免费av资源| 天堂蜜桃91精品| 亚洲丝袜另类动漫二区| 337p日本欧洲亚洲大胆色噜噜| 91久久人澡人人添人人爽欧美| 国产美女娇喘av呻吟久久| 亚洲第一激情av| 亚洲精品精品亚洲| 中文字幕不卡在线观看| 欧美成人a视频| 欧美精品自拍偷拍| 日本乱码高清不卡字幕| 国产乱子伦一区二区三区国色天香| 亚洲成a人片在线观看中文| 最新日韩av在线| 久久久美女毛片| 日韩欧美视频在线 | 国产美女久久久久| 免费人成黄页网站在线一区二区| 亚洲色图在线视频| 久久综合九色综合欧美就去吻| 欧美精品tushy高清| 欧美在线制服丝袜| 一本久久a久久精品亚洲| 成人高清视频在线观看| 国产成人av一区二区三区在线观看| 免费的成人av| 日韩经典一区二区| 亚洲地区一二三色| 亚洲一区二区欧美日韩| 一区二区成人在线视频| 国产精品电影院| 国产精品丝袜久久久久久app| 久久久亚洲国产美女国产盗摄 | 国产精品99久久久| 国产在线视频一区二区| 久久精品72免费观看| 日日夜夜免费精品视频| 午夜久久久久久久久久一区二区| 亚洲一区二区中文在线| 亚洲午夜精品网| 亚洲图片有声小说| 亚洲国产成人精品视频| 亚洲一线二线三线视频| 亚洲国产精品一区二区www在线| 亚洲激情第一区| 亚洲人成电影网站色mp4| 中文字幕佐山爱一区二区免费| 国产精品毛片大码女人| 国产精品美女久久久久久2018 | 成人伦理片在线| 国产成+人+日韩+欧美+亚洲 | 国产激情精品久久久第一区二区| 精品一二三四在线| 国产一区不卡视频| 风间由美一区二区av101| 成人午夜免费电影| 91视频www| 欧美影院精品一区| 欧美视频第二页| 欧美精品日韩精品| 欧美一区二区三区免费大片| 欧美一区二区三区播放老司机| 欧美色综合网站| 日韩亚洲欧美一区| 欧美精品一区二区久久婷婷| 国产亚洲一区二区在线观看| 国产日韩高清在线| 国产精品色在线| 国产精品女人毛片| 亚洲视频每日更新| 亚洲美腿欧美偷拍| 亚洲伊人伊色伊影伊综合网| 亚洲一区影音先锋| 日韩av一级片| 国产在线精品不卡| www.亚洲在线| 欧美视频精品在线观看| 欧美一区二区三区在线视频| 日韩欧美一区二区视频| 精品国产自在久精品国产| 国产午夜精品在线观看| 亚洲欧美一区二区三区孕妇| 亚洲成人av一区二区| 麻豆久久一区二区| 国产精品亚洲第一| 成人黄色777网| 欧美日韩在线免费视频| 日韩午夜电影av| 国产日韩亚洲欧美综合| 亚洲麻豆国产自偷在线| 香蕉久久夜色精品国产使用方法 | 精品国产乱码久久久久久牛牛| 国产欧美日韩三区| 中文字幕一区免费在线观看| 亚洲成在线观看| 老司机免费视频一区二区三区| 懂色av中文字幕一区二区三区 | 欧美中文字幕一二三区视频| 在线播放亚洲一区| 久久亚洲精精品中文字幕早川悠里 | 视频在线观看一区二区三区| 国产美女娇喘av呻吟久久| 91一区二区三区在线观看| 欧美一区二区三区在线电影| 国产亚洲欧洲一区高清在线观看| 亚洲视频一区在线观看| 免费精品视频最新在线| 99久久99久久精品免费看蜜桃| 91精品国产欧美一区二区成人| 久久久久久久久97黄色工厂| 亚洲免费资源在线播放| 精品制服美女久久| 色婷婷综合在线| 久久久精品黄色| 偷窥国产亚洲免费视频| 国产**成人网毛片九色| 欧美一区二区三区四区久久| 国产精品久久久久久久久快鸭| 午夜精品久久久久| 成人av手机在线观看| 日韩女优av电影| 夜色激情一区二区| 国产大片一区二区| 91.xcao| 亚洲美女视频一区| 亚洲高清不卡在线| 日本成人超碰在线观看| 日本女优在线视频一区二区| 久久99日本精品| 成人午夜视频网站| 91小视频免费看| 欧美日韩国产123区| 日韩精品一区二| 久久久五月婷婷| 亚洲美女视频在线观看| 亚洲h动漫在线| 国产精品白丝av| 99精品视频一区|