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

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

?? iuilink.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
字號:
/*
 * IUILINK.CPP
 * Patron Chapter 21
 *
 * Implementation of an object with the IOleUILinkContainer
 * interface necessary to use the standard Links Dialog.  This
 * is implemented as a stand-along object with access to the CPage
 * with which its associated, primiarily because it is only used
 * for the one dialog.  Therefore this object has it's own IUnknown.
 * In addition, we use the Links Assistant object developed in this
 * chapter to simplify our own code.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "patron.h"


/*
 * CIOleUILinkContainer::CIOleUILinkContainer
 * CIOleUILinkContainer::~CIOleUILinkContainer
 *
 * Parameters (Constructor):
 *  pPage           PCPage of the page we're in.
 */

CIOleUILinkContainer::CIOleUILinkContainer(PCPage pPage)
    {
    m_cRef=0;
    m_pPage=pPage;
    m_iTenant=0;
    m_pDelIUILinks=NULL;
    m_fDirty=FALSE;
    return;
    }

CIOleUILinkContainer::~CIOleUILinkContainer(void)
    {
    ReleaseInterface(m_pDelIUILinks);
    return;
    }



/*
 * CIOleUILinkContainer::Init
 *
 * Purpose:
 *  Performs initialization on the object that might fail.  In
 *  particular this creates an object of CLSID_LinksAssistant that
 *  helps in implementing this interface.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  BOOL            TRUE if successful, FALSE otherwise.
 */

BOOL CIOleUILinkContainer::Init(void)
    {
    HRESULT     hr;

    hr=CoCreateInstance(CLSID_LinksAssistant, NULL
        , CLSCTX_INPROC_SERVER, IID_IOleUILinkContainer
        , (PPVOID)&m_pDelIUILinks);

    return SUCCEEDED(hr);
    }





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

STDMETHODIMP CIOleUILinkContainer::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) CIOleUILinkContainer::AddRef(void)
    {
    return ++m_cRef;
    }

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

    delete this;
    return 0;
    }



/*
 * CIOleUILinkContainer::GetNextLink
 *
 * Purpose:
 *  Called when the Links dialog is filling its listbox.  Here we
 *  need to return a key for the first link if dwLink is zero, then
 *  return the next links if it's non-zero.
 *
 * Parameters:
 *  dwLink          DWORD last returned from this function.  Zero if
 *                  this is the first call to this function.
 *
 * Return Value:
 *  DWORD           Some value that identifies this object.  Zero
 *                  stops the sequence such that this function is
 *                  no longer called.
 */

STDMETHODIMP_(DWORD) CIOleUILinkContainer::GetNextLink(DWORD dwLink)
    {
    PCTenant        pTenant;

    //If we're told to start the sequence, set index to zero.
    if (0L==dwLink)
        m_iTenant=0;

    /*
     * On each subsequent call, find the next linked object in
     * this document and return it.  Make sure the index is
     * incremented for the next time this function is called.
     */
    for ( ; m_iTenant < m_pPage->m_cTenants; m_iTenant++)
        {
        if (m_pPage->TenantGet(m_iTenant, &pTenant, FALSE))
            {
            if (TENANTTYPE_LINKEDOBJECT==pTenant->TypeGet())
                {
                m_iTenant++;
                return (DWORD)pTenant;
                }
            }
        }

    //If we hit the end of list, this tells the dialog to stop.
    return 0L;
    }





/*
 * CIOleUILinkContainer::SetLinkUpdateOptions
 *
 * Purpose:
 *  Informs the application to call IOleLink::SetUpdateOptions for
 *  the object identified by dwLink.
 *
 * Parameters:
 *  dwLink          DWORD object identifier as returned from
 *                  GetNextLink.
 *  dwOptions       DWORD containing the new options.
 *
 * Return Value:
 *  HRESULT         Return value of IOleLink::SetUpdateOptions.
 */

STDMETHODIMP CIOleUILinkContainer::SetLinkUpdateOptions(DWORD dwLink
    , DWORD dwOptions)
    {
    LPOLELINK       pIOleLink;
    HRESULT         hr;

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

    /*
     * Your responsibility is to call the object's
     * IOleLink::SetUpdateOptions function with dwOptions.  Simple?
     *
     * For Patron we must first get the object pointer obtainable
     * from the tenant's ObjectGet function, then QI for IOleLink.
     */

    hr=GetObjectInterface(dwLink, IID_IOleLink, (PPVOID)&pIOleLink);

    if (FAILED(hr))
        return hr;

    hr=pIOleLink->SetUpdateOptions(dwOptions);
    pIOleLink->Release();

    m_fDirty=SUCCEEDED(hr);
    return hr;
    }





/*
 * CIOleUILinkContainer::GetLinkUpdateOptions
 *
 * Purpose:
 *  Requests the container to call IOleLink::GetUpdateOptions for
 *  the object identified by dwLink.
 *
 * Parameters:
 *  dwLink          DWORD identifying the object
 *  pdwOptions      LPDWORD in which to store the options.
 *
 * Return Value:
 *  HRESULT         Return value of IOleLink::GetUpdateOptions
 */

STDMETHODIMP CIOleUILinkContainer::GetLinkUpdateOptions(DWORD dwLink
    , LPDWORD pdwOptions)
    {
    LPOLELINK       pIOleLink;
    HRESULT         hr;

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

    hr=GetObjectInterface(dwLink, IID_IOleLink, (PPVOID)&pIOleLink);

    if (FAILED(hr))
        return hr;

    hr=pIOleLink->GetUpdateOptions(pdwOptions);
    pIOleLink->Release();

    return hr;
    }





/*
 * CIOleUILinkContainer::SetLinkSource
 *
 * Purpose:
 *  Changes the moniker to which an object is linked.
 *
 * Parameters:
 *  dwLink          DWORD identifying the object in question.
 *  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         NOERROR if successful, E_FAIL otherwise.
 */

STDMETHODIMP CIOleUILinkContainer::SetLinkSource(DWORD dwLink
    , LPTSTR pszName, ULONG cchName, ULONG *pchEaten
    , BOOL fValidate)
    {
    PCTenant        pTenant=(PCTenant)dwLink;
    HRESULT         hr;
    LPOLELINK       pIOleLink;

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

    //This is for use in GetLinkSource, below.
    pTenant->m_fLinkAvail=FALSE;

    hr=GetObjectInterface(dwLink, IID_IOleLink, (PPVOID)&pIOleLink);

    if (FAILED(hr))
        return hr;

    hr=m_pDelIUILinks->SetLinkSource((DWORD)pIOleLink, pszName
        , cchName, pchEaten, fValidate);
    pIOleLink->Release();

    if (FAILED(hr))
        return hr;

    //hr will be S_FALSE if link is unavailable.
    pTenant->Repaint();
    pTenant->m_fLinkAvail=(NOERROR==hr);
    m_fDirty=TRUE;
    return NOERROR;
    }






/*
 * CIOleUILinkContainer::GetLinkSource
 *
 * Purpose:
 *  Retrieves various strings and values for this link source.
 *
 * Parameters:
 *  dwLink          DWORD identifying 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 * in which to return if this is an
 *                  available link source.
 *  pfSelected      BOOL * in which to return if this object is
 *                  currently selected in the document.  This
 *                  selects the item in the listbox for this object.
 *
 * Return Value:
 *  HRESULT         NOERROR on success, error code otherwise.
 */

STDMETHODIMP CIOleUILinkContainer::GetLinkSource(DWORD dwLink
    , LPTSTR *ppszName, ULONG *pcchName, LPTSTR *ppszFullLink
    , LPTSTR *ppszShortLink, BOOL *pfSourceAvail, BOOL *pfSelected)
    {
    HRESULT         hr;
    PCTenant        pTenant=(PCTenant)dwLink;
    LPOLELINK       pIOleLink=NULL;
    LPOLEOBJECT     pIOleObject=NULL;
    LPMONIKER       pmk=NULL;
    LPMONIKER       pmkFirst=NULL;
    LPBC            pbc=NULL;

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

    //We know what this is from SetLinkSource
    *pfSourceAvail=pTenant->m_fLinkAvail;

    if (pfSelected)
        *pfSelected=pTenant->FIsSelected();

    hr=GetObjectInterface(dwLink, IID_IOleLink, (PPVOID)&pIOleLink);

    if (FAILED(hr))
        return hr;

    hr=m_pDelIUILinks->GetLinkSource((DWORD)pIOleLink, ppszName
        , pcchName, ppszFullLink, ppszShortLink, pfSourceAvail
        , pfSelected);

    pIOleLink->Release();
    return hr;
    }





/*
 * CIOleUILinkContainer::OpenLinkSource
 *
 * Purpose:
 *  Asks the container to call DoVerb on this object with
 *  OLEIVERB_SHOW.
 *
 * Parameters:
 *  dwLink          DWORD identifying the linked object.
 *
 * Return Value:
 *  HRESULT         Standard.
 */

STDMETHODIMP CIOleUILinkContainer::OpenLinkSource(DWORD dwLink)
    {
    PCTenant        pTenant=(PCTenant)dwLink;

    pTenant->Activate(OLEIVERB_OPEN);
    return NOERROR;
    }




/*
 * CIOleUILinkContainer::UpdateLink
 *
 * Purpose:
 *  Asks the container to update the link for this object.
 *
 * Parameters:
 *  dwLink          DWORD identifying the linked object.
 *  fErrorMessage   BOOL indicating if we can show errors.
 *  fErrorAction    BOOL making no sense whatsoever.
 *
 * Return Value:
 *  HRESULT         Standard.
 */

STDMETHODIMP CIOleUILinkContainer::UpdateLink(DWORD dwLink
    , BOOL fErrorMessage, BOOL fErrorAction)
    {
    PCTenant        pTenant=(PCTenant)dwLink;
    LPOLELINK       pIOleLink;
    HRESULT         hr;

    hr=GetObjectInterface(dwLink, IID_IOleLink, (PPVOID)&pIOleLink);

    if (FAILED(hr))
        return hr;

    hr=m_pDelIUILinks->UpdateLink((DWORD)pIOleLink, fErrorMessage
        , fErrorAction);

    pTenant->Repaint();
    pTenant->m_fLinkAvail=SUCCEEDED(hr);
    pIOleLink->Release();

    if (FAILED(hr))
        {
        if (fErrorMessage)
            {
            MessageBox(m_pPage->m_hWnd
                , TEXT("Could not update link."), TEXT("Patron")
                , MB_OK);
            }
        }
    else
        m_fDirty=TRUE;

    return hr;
    }






/*
 * CIOleUILinkContainer::CancelLink
 *
 * Purpose:
 *  Requests that the container turn this linked object into a
 *  static object.
 *
 * Parameters:
 *  dwLink          DWORD identifying the linked object.
 *
 * Return Value:
 *  HRESULT         Standard.
 */

STDMETHODIMP CIOleUILinkContainer::CancelLink(DWORD dwLink)
    {
    PCTenant        pTenant=(PCTenant)dwLink;
    LPOLELINK       pIOleLink;
    HRESULT         hr;

    hr=GetObjectInterface(dwLink, IID_IOleLink, (PPVOID)&pIOleLink);

    if (FAILED(hr))
        return hr;

    //This sets the source moniker to NULL.
    m_pDelIUILinks->CancelLink((DWORD)pIOleLink);
    pIOleLink->Release();

    //Go change this object over to a static one.
    pTenant->ConvertToStatic();

    m_fDirty=TRUE;
    return NOERROR;
    }






//PROTECTED FUNCTIONS INTERNAL TO CIOleUILinkContainer


/*
 * CIOleUILinkContainer::GetObjectInterface
 * (Protected)
 *
 * Purpose:
 *  Retrieves and interface pointer for the object identified by
 *  dwLink
 *
 * Parameters:
 *  dwLink          DWORD identifying the object
 *  riid            REFIID of the interface desired.
 *  ppv             PPVOID into which we return the pointer.
 *
 * Return Value:
 *  HRESULT         NOERROR on success, error code otherwise.
 */

STDMETHODIMP CIOleUILinkContainer::GetObjectInterface(DWORD dwLink
    , REFIID riid, PPVOID ppv)
    {
    PCTenant        pTenant=(PCTenant)dwLink;
    LPUNKNOWN       pIUnknown;
    HRESULT         hr;

    pTenant->ObjectGet(&pIUnknown);
    hr=pIUnknown->QueryInterface(riid, ppv);
    pIUnknown->Release();

    return hr;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲福利一二三区| 蜜芽一区二区三区| 欧美电视剧在线看免费| 成人精品鲁一区一区二区| 亚洲国产美国国产综合一区二区| 精品国产一区二区三区久久久蜜月| 一本一道综合狠狠老| 激情综合色播激情啊| 亚洲大片精品永久免费| 亚洲欧美日本在线| 久久久不卡网国产精品二区| 在线观看不卡一区| 成人午夜激情视频| 国产中文一区二区三区| 午夜久久久久久久久久一区二区| 18欧美亚洲精品| 久久久久久久精| 日韩情涩欧美日韩视频| 欧美三级在线看| 一本到三区不卡视频| 成人免费电影视频| 国产一区中文字幕| 麻豆精品视频在线观看免费| 日韩在线卡一卡二| 日韩成人精品在线观看| 亚洲一区二区三区三| 亚洲九九爱视频| 亚洲人成在线播放网站岛国| 国产精品理论片在线观看| 欧美tickling网站挠脚心| 欧美一区二区三区视频| 欧美另类高清zo欧美| 在线观看日产精品| 在线免费观看不卡av| 色欧美88888久久久久久影院| 波波电影院一区二区三区| 粉嫩欧美一区二区三区高清影视| 国产精品亚洲成人| 成人午夜在线播放| 成人精品鲁一区一区二区| 国产一区二区三区四| 国产美女视频91| 国产高清成人在线| 成人一区二区三区视频| 成人国产免费视频| 99久久国产免费看| 色8久久精品久久久久久蜜| 91麻豆自制传媒国产之光| 91麻豆6部合集magnet| 色婷婷精品大在线视频| 色av成人天堂桃色av| 欧美亚洲一区二区在线观看| 欧美猛男超大videosgay| 欧美久久久影院| 欧美电影免费观看高清完整版在线 | 欧美大胆一级视频| 欧美成人精品二区三区99精品| 日韩欧美一卡二卡| 国产欧美日韩综合| 亚洲色图在线看| 午夜精品久久久久久久久| 日韩国产一二三区| 国产毛片精品一区| a4yy欧美一区二区三区| 欧美三区在线观看| 日韩欧美中文一区二区| 久久久久国产精品麻豆ai换脸 | 日韩中文字幕亚洲一区二区va在线| 日韩精品福利网| 韩国精品在线观看| 国产成人啪午夜精品网站男同| 播五月开心婷婷综合| 日本高清不卡在线观看| 制服丝袜中文字幕亚洲| 久久久午夜精品| 一区二区高清免费观看影视大全| 婷婷丁香激情综合| 国产高清视频一区| 欧美军同video69gay| 久久亚洲精精品中文字幕早川悠里| 中文字幕第一区二区| 五月综合激情日本mⅴ| 国产激情精品久久久第一区二区| 一本大道av伊人久久综合| 日韩一区二区在线观看视频播放 | 亚洲成人动漫在线免费观看| 狠狠色丁香久久婷婷综合丁香| aaa欧美大片| 精品理论电影在线| 亚洲手机成人高清视频| 韩国午夜理伦三级不卡影院| 99视频精品全部免费在线| 日韩亚洲欧美综合| 亚洲欧美日韩一区二区三区在线观看| 日本vs亚洲vs韩国一区三区二区| 大胆欧美人体老妇| 欧美一区二区三区精品| 亚洲视频在线一区观看| 国产尤物一区二区| 91精品国产综合久久福利| 中文字幕在线一区二区三区| 日本va欧美va欧美va精品| 日本电影亚洲天堂一区| 国产精品视频在线看| 青青草97国产精品免费观看无弹窗版 | 在线亚洲免费视频| 国产片一区二区| 蜜臂av日日欢夜夜爽一区| 色婷婷亚洲综合| 国产欧美一区在线| 日韩av在线发布| 91视频观看免费| 欧美国产日韩一二三区| 美国一区二区三区在线播放| 91国在线观看| 亚洲欧洲精品一区二区精品久久久| 久久精品国产精品亚洲红杏| 在线观看日韩一区| 中文字幕制服丝袜成人av| 国产成人av电影免费在线观看| 日韩视频免费观看高清完整版 | 国产老妇另类xxxxx| 欧美一区二区在线播放| 午夜精品在线视频一区| 色88888久久久久久影院野外| 国产精品久久久久久久久免费樱桃| 国产麻豆精品在线| 久久人人超碰精品| 国产一区二区在线影院| 日韩欧美激情一区| 日韩精品乱码免费| 91精品国产入口| 日av在线不卡| 777欧美精品| 日韩黄色免费网站| 在线电影院国产精品| 亚洲va在线va天堂| 欧美日韩国产高清一区二区三区| 亚洲综合色在线| 91麻豆高清视频| 亚洲国产精品久久一线不卡| 欧美性xxxxxx少妇| 天天av天天翘天天综合网 | 中文字幕亚洲电影| 97se亚洲国产综合自在线不卡| 国产精品国产三级国产| 99久久精品国产毛片| 一区二区三区美女| 欧美日韩午夜精品| 视频一区中文字幕| 精品欧美一区二区久久| 国产美女娇喘av呻吟久久| 亚洲国产激情av| 91亚洲国产成人精品一区二区三| 亚洲欧美另类小说| 91麻豆精品国产91久久久更新时间| 日韩国产精品91| 久久综合九色综合欧美亚洲| 国产精品影视网| 亚洲日本va午夜在线电影| 色哟哟一区二区三区| 亚洲精品欧美激情| 91麻豆精品国产自产在线观看一区| 免费成人美女在线观看| 久久精品亚洲精品国产欧美kt∨ | 国产丶欧美丶日本不卡视频| 国产精品乱人伦| 欧美日韩一本到| 激情六月婷婷综合| 中文字幕字幕中文在线中不卡视频| 欧美视频在线不卡| 精品无人区卡一卡二卡三乱码免费卡| 国产日韩精品一区二区浪潮av| 91啪九色porn原创视频在线观看| 亚洲午夜日本在线观看| 精品久久久久久亚洲综合网| 99久久伊人久久99| 三级在线观看一区二区| 久久一区二区视频| 欧美在线不卡视频| 黄色日韩网站视频| 亚洲国产cao| 久久久久一区二区三区四区| 色天天综合色天天久久| 麻豆视频观看网址久久| 亚洲日本一区二区| 日韩欧美一级精品久久| 99精品久久只有精品| 理论片日本一区| 樱桃视频在线观看一区| 欧美成人伊人久久综合网| 色婷婷一区二区| 国产成人在线免费观看| 午夜亚洲福利老司机| 中文字幕av资源一区| 欧美一区二区三区四区视频| 92国产精品观看| 国产精品123| 免费看黄色91| 亚洲综合成人在线|