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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lnkassis.cpp

?? 英文版的 想要的話可以下載了 為大家服務(wù)
?? CPP
字號(hào):
/*
 * LNKASSIS.CPP
 * Links Assistant Chapter 20
 *
 * Implementation of the CLinks object with the IOleUILinkContainer
 * interface to assist handling the Links dialog for linking
 * containers.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "lnkassis.h"


/*
 * CLinks::CLinks
 * CLinks::~CLinks
 *
 * Parameters (Constructor):
 *  pfnDestroy      PFNDESTROYED to call when object is destroyed.
 */

CLinks::CLinks(PFNDESTROYED pfnDestroy)
    {
    m_cRef=0;
    m_pfnDestroy=pfnDestroy;
    return;
    }


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




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

STDMETHODIMP CLinks::QueryInterface(REFIID riid, PPVOID ppv)
    {
    *ppv=NULL;

    if (IID_IUnknown==riid || IID_IOleUILinkContainer==riid)
        {
        *ppv=this;
        AddRef();
        return NOERROR;
        }

    return ResultFromScode(E_NOINTERFACE);
    }


STDMETHODIMP_(ULONG) CLinks::AddRef(void)
    {
    return ++m_cRef;
    }


STDMETHODIMP_(ULONG) CLinks::Release(void)
    {
    if (0L!=--m_cRef)
        return m_cRef;

    if (NULL!=m_pfnDestroy)
        (*m_pfnDestroy)();

    delete this;
    return 0;
    }





/*
 * CLinks::GetNextLink
 *
 * Purpose:
 *  Function to fill out the IOleUILinkContainer interface.
 *  Does nothing.
 *
 * Parameters:
 *  dwLink          DWORD ignored.
 *
 * Return Value:
 *  DWORD           Alwaus 0L
 *
 */

STDMETHODIMP_(DWORD) CLinks::GetNextLink(DWORD dwLink)
    {
    return 0L;
    }





/*
 * CLinks::SetLinkUpdateOptions
 *
 * Purpose:
 *  Calls IOleLink::SetUpdateOptions for the object identified by
 *  dwLink.
 *
 * Parameters:
 *  dwLink          DWORD, an IOleLink pointer to the object
 *                  affected.
 *  dwOptions       DWORD containing the new options.
 *
 * Return Value:
 *  HRESULT         Return value of IOleLink::SetUpdateOptions.
 */

STDMETHODIMP CLinks::SetLinkUpdateOptions(DWORD dwLink
    , DWORD dwOptions)
    {
    LPOLELINK       pIOleLink=(LPOLELINK)dwLink;

    if (NULL==pIOleLink)
        return ResultFromScode(E_FAIL);

    return pIOleLink->SetUpdateOptions(dwOptions);
    }





/*
 * CLinks::GetLinkUpdateOptions
 *
 * Purpose:
 *  Call IOleLink::GetUpdateOptions for the object identified by
 *  dwLink.
 *
 * Parameters:
 *  dwLink          DWORD, an IOleLink pointer to the object
 *                  affected.
 *  pdwOptions      LPDWORD in which to store the options.
 *
 * Return Value:
 *  HRESULT         Return value of IOleLink::GetUpdateOptions
 */

STDMETHODIMP CLinks::GetLinkUpdateOptions(DWORD dwLink
    , LPDWORD pdwOptions)
    {
    LPOLELINK       pIOleLink=(LPOLELINK)dwLink;

    if (NULL==pIOleLink)
        return ResultFromScode(E_FAIL);

    return pIOleLink->GetUpdateOptions(pdwOptions);
    }





/*
 * CLinks::SetLinkSource
 *
 * Purpose:
 *  Changes the moniker to which an object is linked.
 *
 * Parameters:
 *  dwLink          DWORD, an IOleLink pointer to the object
 *                  affected.
 *  pszName         LPTSTR to the displayable name of the source.
 *  cchName         ULONG length of the file portaion of pszName
 *  pchEaten        ULONG * in which to return the number of
 *                  characters used in parsing pszDisplayName.
 *  fValidate       BOOL indicating if we're to validate that the
 *                  source exists first.
 *
 * Return Value:
 *  HRESULT         If successful, NOERROR indicates that the link
 *                  is available, S_FALSE to indicate it's not.
 *                  This information is later required in
 *                  GetLinkSource.  E_FAIL on failure.
 */

STDMETHODIMP CLinks::SetLinkSource(DWORD dwLink, LPTSTR pszName
    , ULONG cchName, ULONG *pchEaten, BOOL fValidate)
    {
    LPOLELINK       pIOleLink=(LPOLELINK)dwLink;
    HRESULT         hr;
    CLSID           clsID=CLSID_NULL;
    LPMONIKER       pmk=NULL;
    BOOL            fAvail=FALSE;

    if (fValidate)
        {
        //Check things out and get a moniker and CLSID.
        if (!ValidateLinkSource(pszName, pchEaten, &pmk, &clsID))
            return ResultFromScode(E_FAIL);

        //If we got a CLSID, then we found the source.
        if (CLSID_NULL!=clsID)
            fAvail=TRUE;
        }
    else
        {
        if (!CreateNewSourceMoniker(pszName, cchName, &pmk))
            return ResultFromScode(E_FAIL);
        }

    if (NULL==pIOleLink)
        {
        pmk->Release();
        return ResultFromScode(E_FAIL);
        }

    if (NULL!=pmk)
        {
        hr=pIOleLink->SetSourceMoniker(pmk, clsID);
        pmk->Release();
        }
    else
       #ifdef WIN32ANSI
        {
        OLECHAR     szTemp[512];

        MultiByteToWideChar(CP_ACP, 0, pszName, -1, szTemp, 512);
        hr=pIOleLink->SetSourceDisplayName(szTemp);
        }
       #else
        hr=pIOleLink->SetSourceDisplayName(pszName);
       #endif

    if (FAILED(hr))
        return hr;

    return fAvail ? NOERROR : ResultFromScode(S_FALSE);
    }






/*
 * CLinks::GetLinkSource
 *
 * Purpose:
 *  Retrieves various strings and values for this link source.
 *
 * Parameters:
 *  dwLink          DWORD, an IOleLink pointer to the object
 *                  affected.
 *  ppszName        LPTSTR * in which to return the new source
 *                  name
 *  pcchName        ULONG * in which to return the length of
 *                  pszName
 *  ppszFullLink    LPTSTR * in which to return the full name of
 *                  the class of linked object.
 *  ppszShortLink   LPTSTR * in which to return the short name of
 *                  the class of linked object.
 *  pfSourceAvail   BOOL * ignored.
 *  pfSelected      BOOL * ignored.
 *
 * Return Value:
 *  HRESULT         NOERROR on success, error code otherwise.
 */

STDMETHODIMP CLinks::GetLinkSource(DWORD dwLink
    , LPTSTR *ppszName, ULONG *pcchName
    , LPTSTR *ppszFullLink, LPTSTR *ppszShortLink
    , BOOL *pfSourceAvail, BOOL *pfSelected)
    {
    LPOLELINK       pIOleLink=(LPOLELINK)dwLink;
    HRESULT         hr;
    LPOLEOBJECT     pIOleObject=NULL;
    LPMONIKER       pmk=NULL;
    LPMONIKER       pmkFirst=NULL;
    LPBC            pbc=NULL;
   #ifdef WIN32ANSI
    OLECHAR        *pszOut;
    TCHAR          *pszTemp;
   #endif

    if (NULL==pIOleLink)
        return ResultFromScode(E_FAIL);

    *ppszName=NULL;
    *pcchName=0;
    *ppszFullLink=NULL;
    *ppszShortLink=NULL;

    hr=pIOleLink->GetSourceMoniker(&pmk);

    if (SUCCEEDED(hr))
        {
        hr=pIOleLink->QueryInterface(IID_IOleObject
            , (PPVOID)&pIOleObject);

        if (SUCCEEDED(hr))
            {
           #ifdef WIN32ANSI
            pszTemp=(TCHAR *)CoTaskMemAlloc(80);
            pIOleObject->GetUserType(USERCLASSTYPE_FULL
                , &pszOut);
            WideCharToMultiByte(CP_ACP, 0, pszOut, -1
                , pszTemp, 80, NULL, NULL);
            CoTaskMemFree((void *)pszOut);
            *ppszFullLink=pszTemp;

            pszTemp=(TCHAR *)CoTaskMemAlloc(80);
            pIOleObject->GetUserType(USERCLASSTYPE_SHORT
                , &pszOut);
            WideCharToMultiByte(CP_ACP, 0, pszOut, -1
                , pszTemp, 80, NULL, NULL);
            CoTaskMemFree((void *)pszOut);
            *ppszShortLink=pszTemp;
           #else
            pIOleObject->GetUserType(USERCLASSTYPE_FULL
                , ppszFullLink);
            pIOleObject->GetUserType(USERCLASSTYPE_SHORT
                , ppszShortLink);
           #endif
            pIOleObject->Release();
            }

        *pcchName=CchFilePrefix(pmk);
        pmk->Release();
        }

   #ifdef WIN32ANSI
    pszTemp=(TCHAR *)CoTaskMemAlloc(80);
    hr=pIOleLink->GetSourceDisplayName(&pszOut);
    WideCharToMultiByte(CP_ACP, 0, pszOut, -1
        , pszTemp, 80, NULL, NULL);
    CoTaskMemFree((void *)pszOut);
    *ppszName=pszTemp;
    return hr;
   #else
    return pIOleLink->GetSourceDisplayName(ppszName);
   #endif
    }





/*
 * CLinks::OpenLinkSource
 *
 * Purpose:
 *  Does nothing.  The container using this object is the only
 *  one that knows how to activate an object properly.
 *
 * Parameters:
 *  dwLink          DWORD ignored.
 *
 * Return Value:
 *  HRESULT         NOERROR
 */

STDMETHODIMP CLinks::OpenLinkSource(DWORD dwLink)
    {
    return NOERROR;
    }






/*
 * CLinks::UpdateLink
 *
 * Purpose:
 *  Updates the link for this object.
 *
 * Parameters:
 *  dwLink          DWORD, an IOleLink pointer to the object
 *                  affected.
 *  fErrorMessage   BOOL indicating if we can show errors.
 *  fErrorAction    BOOL making no sense whatsoever.
 *
 * Return Value:
 *  HRESULT         NOERROR if successful, error code otherwise. If
 *                  there is an error, the caller should set the
 *                  link availability flag to FALSE.  Otherwise set
 *                  to TRUE.
 */

STDMETHODIMP CLinks::UpdateLink(DWORD dwLink
    , BOOL fErrorMessage, BOOL fErrorAction)
    {
    LPOLELINK       pIOleLink=(LPOLELINK)dwLink;
    HRESULT         hr;
    LPOLEOBJECT     pIOleObject;

    if (NULL==pIOleLink)
        return ResultFromScode(E_FAIL);

    hr=pIOleLink->QueryInterface(IID_IOleObject
        , (PPVOID)&pIOleObject);

    if (FAILED(hr))
        return hr;

    hr=pIOleObject->IsUpToDate();
	
    if (NOERROR!=hr)
        {
        hr=pIOleObject->Update();

        if (FAILED(hr))
            return hr;
        }

    return NOERROR;
    }






/*
 * CLinks::CancelLink
 *
 * Purpose:
 *  Sets the source moniker in the link to NULL but does nothing
 *  else.  How the container decides to convert this to static
 *  is its choice.
 *
 * Parameters:
 *  dwLink          DWORD, an IOleLink pointer to the object
 *                  affected.
 *
 * Return Value:
 *  HRESULT         Standard.
 */

STDMETHODIMP CLinks::CancelLink(DWORD dwLink)
    {
    LPOLELINK       pIOleLink=(LPOLELINK)dwLink;

    if (NULL!=pIOleLink)
        return pIOleLink->SetSourceMoniker(NULL, CLSID_NULL);

    return NOERROR;
    }





//PROTECTED FUNCTIONS INTERNAL TO CLinks

/*
 * CLinks::ValidateLinkSource
 * (Protected)
 *
 * Purpose:
 *  Given a name of a link source retrieve a moniker for it and
 *  a CLSID if we can bind.
 *
 * Parameters:
 *  pszName         LPTSTR of the source
 *  pchEaten        ULONG * into which to return how many
 *                  characters we parse.
 *  ppmk            LPMONIKER * into which to store the moniker
 *  pclsID          LPCLSID into which to store the clsID.
 *
 * Return Value:
 *  BOOL            TRUE if *ppmk has a valid moniker,
 *                  FALSE otherwise.
 */

BOOL CLinks::ValidateLinkSource(LPTSTR pszName
    , ULONG *pchEaten, LPMONIKER *ppmk, LPCLSID pclsID)
    {
    HRESULT     hr;
    LPBC        pbc=NULL;
    LPOLEOBJECT pIOleObject;

    *ppmk=NULL;
    *pclsID=CLSID_NULL;

    if (FAILED(CreateBindCtx(0, &pbc)))
        return FALSE;

    hr=MkParseDisplayName(pbc, pszName, pchEaten, ppmk);

    if (SUCCEEDED(hr))
        {
        /*
         * Now that we have a moniker for this new source, so try
         * binding to that source and get its CLSID.
         */
        hr=(*ppmk)->BindToObject(pbc, NULL, IID_IOleObject
            , (PPVOID)&pIOleObject);

        if (SUCCEEDED(hr))
            {
            pIOleObject->GetUserClassID(pclsID);
            pIOleObject->Release();
            }

        return TRUE;
        }

    pbc->Release();
    return FALSE;
    }




/*
 * CLinks::CreateNewSourceMoniker
 * (Protected)
 *
 * Purpose:
 *  Given a name of a link source create a moniker for it.
 *
 * Parameters:
 *  pszName         LPTSTR of the source
 *  cchName         ULONG length of the filename in pszName.
 *  ppmk            LPMONIKER * into which to store the moniker
 *
 * Return Value:
 *  BOOL            TRUE if *ppmk has a valid moniker,
 *                  FALSE otherwise.
 */

BOOL CLinks::CreateNewSourceMoniker(LPTSTR pszName
    , ULONG cchName, LPMONIKER *ppmk)
    {
    TCHAR       szName[CCHPATHMAX];
    LPMONIKER   pmkFile=NULL;
    LPMONIKER   pmkItem=NULL;

    *ppmk=NULL;
    lstrcpyn(szName, pszName, (int)cchName+1);
    CreateFileMoniker(szName, &pmkFile);

    if (NULL==pmkFile)
        return FALSE;

    if (lstrlen(pszName) > (int)cchName)
        {
        lstrcpy(szName, pszName+cchName+1);
        CreateItemMoniker(TEXT("!"), szName, &pmkItem);

        if (NULL!=pmkItem)
            {
            CreateGenericComposite(pmkFile, pmkItem, ppmk);
            pmkItem->Release();
            }

        pmkFile->Release();

        if (NULL==*ppmk)
            return FALSE;
        }
    else
        *ppmk=pmkFile;

    return TRUE;
    }




/*
 * CLinks::CchFilePrefix
 * (Protected)
 *
 * Purpose:
 *  Returns the length of a file moniker given that pmk is either
 *  a file moniker or a composite containing a file moniker
 *  as the first item.
 *
 * Parameters:
 *  pmk             IMoniker * to check.
 *
 * Return Value:
 *  UINT            Length of the file moniker text.
 */

UINT CLinks::CchFilePrefix(LPMONIKER pmk)
    {
    LPMONIKER       pmkFirst=NULL;
    LPENUMMONIKER   pEnum;
    DWORD           dwMk;
    LPOLESTR        psz=NULL;
    LPBC            pbc=NULL;
    ULONG           cch=0;
    HRESULT         hr;

    if (NULL==pmk)
       return 0;

    hr=pmk->IsSystemMoniker(&dwMk);

    if (FAILED(hr) || MKSYS_GENERICCOMPOSITE!=dwMk)
        {
        //Already a single moniker
        pmkFirst=pmk;
        pmk->AddRef();
        }
    else
        {
        //Pull off the first moniker in a composite
        hr=pmk->Enum(TRUE, &pEnum);

        if (FAILED(hr))
            return NULL;

        hr=pEnum->Next(1, &pmkFirst, NULL);
        pEnum->Release();
        }

    if (NULL==pmkFirst)
        return 0;

    hr=pmkFirst->IsSystemMoniker(&dwMk);

    if (SUCCEEDED(hr) && MKSYS_FILEMONIKER==dwMk);
        {
        if (SUCCEEDED(CreateBindCtx(0, &pbc)))
            {
            if (SUCCEEDED(pmkFirst->GetDisplayName(pbc, NULL
                , &psz)))
                {
               #ifdef WIN32ANSI
                cch=wcslen(psz);
               #else
                cch=lstrlen(psz);
               #endif
                CoTaskMemFree((void *)psz);
                }

            pbc->Release();
            }
        }

    pmkFirst->Release();
    return cch;
    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香久久婷婷综合丁香| 亚洲精品日日夜夜| 欧美日韩国产一级片| 韩国午夜理伦三级不卡影院| 最新国产の精品合集bt伙计| 日韩你懂的在线观看| 91精彩视频在线观看| 国产精品69毛片高清亚洲| 视频一区二区三区在线| 最新国产精品久久精品| 精品国产露脸精彩对白| 7777精品久久久大香线蕉 | 久久精品免费观看| 五月天精品一区二区三区| 综合久久久久久久| 一区在线播放视频| 国产精品国产自产拍高清av| 国产亚洲欧美日韩俺去了| 日韩一级片在线播放| 制服丝袜在线91| 欧美一区在线视频| 日韩一级视频免费观看在线| 欧美一区二区视频在线观看2020 | 欧美系列亚洲系列| 成人av午夜影院| 99久久久久免费精品国产| 99久久99久久精品国产片果冻| 成人毛片老司机大片| 91论坛在线播放| 欧美日免费三级在线| 日韩免费电影一区| 国产日韩精品一区二区三区在线| 久久午夜羞羞影院免费观看| 国产亚洲精品福利| 国模大尺度一区二区三区| 国产成人小视频| 九九久久精品视频| 亚洲男人的天堂一区二区| 国产亚洲欧美色| 欧美成人精品3d动漫h| 综合激情成人伊人| 精品国产伦一区二区三区观看体验| 欧美一区二区三区影视| 2020国产成人综合网| 国产喷白浆一区二区三区| 亚洲国产成人一区二区三区| 亚洲国产一区二区三区 | 久久99九九99精品| 亚洲一区在线视频| 洋洋成人永久网站入口| 精一区二区三区| 一本色道a无线码一区v| 国产精品国产三级国产有无不卡| 亚洲品质自拍视频| 国产福利91精品| 日韩一区二区电影网| 亚洲免费av高清| 懂色av一区二区三区免费看| 欧美日韩国产一区| 亚洲曰韩产成在线| av中文字幕一区| 日本一区二区动态图| 日韩国产精品久久| 在线观看免费亚洲| 亚洲精品视频免费看| av电影天堂一区二区在线| 国产视频一区二区三区在线观看| 久久精品国产精品青草| 在线不卡欧美精品一区二区三区| 一区免费观看视频| 99久久精品免费看国产| 国产精品视频yy9299一区| 国产999精品久久久久久| 久久综合久久综合久久| 乱中年女人伦av一区二区| 精品国内二区三区| 国产一区二区三区免费看| 欧美电影免费观看完整版| 国内精品视频一区二区三区八戒 | 香蕉乱码成人久久天堂爱免费| 在线免费观看日本一区| 亚洲国产aⅴ成人精品无吗| 欧美日本精品一区二区三区| 亚洲第一电影网| 欧美一级视频精品观看| 国产精品夜夜爽| 亚洲精品日韩一| 日韩亚洲欧美高清| 国产成人综合在线播放| 中文字幕日韩一区| 日本久久电影网| 麻豆91小视频| 国产精品国产a| 精品国产一区二区亚洲人成毛片 | 九九精品视频在线看| 中文字幕国产一区| 欧美系列在线观看| 国产成人8x视频一区二区| 亚洲福利一区二区三区| 精品久久久久一区二区国产| 91碰在线视频| 国内精品国产成人国产三级粉色| 亚洲精品成人天堂一二三| 久久中文字幕电影| 欧美日韩一区不卡| 高清国产一区二区三区| 亚洲午夜电影网| 国产精品国产三级国产a| 精品嫩草影院久久| 欧美中文字幕久久| 国产aⅴ精品一区二区三区色成熟| 一区在线中文字幕| 久久久久久久久久久电影| 欧美三区在线视频| 91成人看片片| 欧美日韩在线综合| 色域天天综合网| 色婷婷综合激情| 91丨porny丨首页| 99久久99久久久精品齐齐| 国产一区二区看久久| 久久99久久99| 蜜臀久久久久久久| 婷婷六月综合亚洲| 亚洲国产美女搞黄色| 亚洲一区二区av在线| 亚洲国产欧美在线人成| 一区二区三区在线影院| 亚洲精品中文在线| 亚洲国产中文字幕在线视频综合| 亚洲综合色成人| 青青草国产成人99久久| 美女在线观看视频一区二区| 国产一区二区三区四区五区美女| 国产精一区二区三区| 成人app在线| 欧美亚洲综合色| 在线电影一区二区三区| 欧美大白屁股肥臀xxxxxx| 日韩欧美亚洲一区二区| 国产午夜精品福利| 有码一区二区三区| 亚洲综合色区另类av| 天堂av在线一区| 成人午夜激情在线| 日本韩国欧美在线| www国产精品av| 亚洲乱码中文字幕综合| 激情欧美一区二区三区在线观看| 丁香另类激情小说| 欧美高清精品3d| 中文字幕字幕中文在线中不卡视频| 五月婷婷激情综合| www.日韩大片| 久久尤物电影视频在线观看| 亚洲女人的天堂| 久久99最新地址| 51午夜精品国产| 亚洲综合无码一区二区| av资源站一区| 久久精品欧美一区二区三区不卡| 午夜精品一区二区三区电影天堂| 成人福利电影精品一区二区在线观看| 欧美久久一区二区| 一二三四区精品视频| 97久久精品人人做人人爽50路| 精品日韩一区二区| 琪琪久久久久日韩精品| 欧美最新大片在线看 | 欧美性猛片aaaaaaa做受| 久久女同精品一区二区| 久久激情综合网| 日韩欧美国产一区在线观看| 亚洲在线免费播放| 在线观看亚洲专区| 亚洲丰满少妇videoshd| 色婷婷av一区二区三区大白胸| 国产日本欧美一区二区| 国产suv精品一区二区6| 久久久99免费| 成人精品视频一区二区三区尤物| 中日韩av电影| 欧美影院一区二区| 亚洲国产成人精品视频| 欧美日韩中文精品| 日韩中文字幕一区二区三区| 日韩欧美综合在线| 精品在线视频一区| 国产精品久久久久久久久快鸭| 99精品欧美一区二区蜜桃免费| 亚洲欧美日韩中文字幕一区二区三区 | 国产精品久久久久久久久果冻传媒| 成人自拍视频在线观看| 亚洲精品免费在线播放| 欧美一区日韩一区| 93久久精品日日躁夜夜躁欧美| 亚洲成国产人片在线观看| 久久综合色之久久综合| 99久久伊人网影院| 午夜不卡av免费|