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

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

?? tenant.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/*
 * TENANT.CPP
 * Patron Chapter 17
 *
 * Implementation of the CTentant class which holds information
 * for a single object on a page.  It maintains position, references
 * to data, and a storage.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "patron.h"


/*
 * CTenant::CTenant
 * CTenant::~CTenant
 *
 * Constructor Parameters:
 *  dwID            DWORD identifier for this page.
 *  hWnd            HWND of the pages window.
 *  pPG             PCPages to the parent structure.
 */

CTenant::CTenant(DWORD dwID, HWND hWnd, PCPages pPG)
    {
    m_hWnd=hWnd;
    m_dwID=dwID;

    m_fInitialized=0;
    m_pIStorage=NULL;
    m_cOpens=0;

    m_pObj=NULL;
    m_pPG =pPG;
    m_clsID=CLSID_NULL;
    m_fSetExtent=FALSE;

    //CHAPTER17MOD
    m_cRef=0;
    m_pIOleObject=NULL;
    m_pIViewObject2=NULL;
    m_grfMisc=0;

    m_pImpIOleClientSite=NULL;
    m_pImpIAdviseSink=NULL;

    m_fRepaintEnabled=TRUE;
    //End CHAPTER17MOD
    return;
    }


CTenant::~CTenant(void)
    {
    //CHAPTER17MOD
    //Object pointers cleaned up in Close.

    DeleteInterfaceImp(m_pImpIAdviseSink);
    DeleteInterfaceImp(m_pImpIOleClientSite);
    //End CHAPTER17MOD

    return;
    }




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

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

    if (IID_IUnknown==riid)
        *ppv=this;

    if (IID_IOleClientSite==riid)
        *ppv=m_pImpIOleClientSite;

    if (IID_IAdviseSink==riid)
        *ppv=m_pImpIAdviseSink;

    if (NULL!=*ppv)
        {
        ((LPUNKNOWN)*ppv)->AddRef();
        return NOERROR;
        }

    return ResultFromScode(E_NOINTERFACE);
    }


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

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

    delete this;
    return 0;
    }

//End CHAPTER17MOD





/*
 * CTenant::GetID
 *
 * Return Value:
 *  DWORD           dwID field in this tenant.
 */

DWORD CTenant::GetID(void)
    {
    return m_dwID;
    }



/*
 * CTenant::GetStorageName
 *
 * Parameters:
 *  pszName         LPOLESTR to a buffer in which to store the storage
 *                  name for this tenant.
 *
 * Return Value:
 *  UINT            Number of characters stored.
 */

UINT CTenant::GetStorageName(LPOLESTR pszName)
    {
   #ifdef WIN32ANSI
    char        szTemp[32];
    UINT        cch;

    cch=wsprintf(szTemp, "Tenant %lu", m_dwID);
    MultiByteToWideChar(CP_ACP, 0, szTemp, -1, pszName, 32);
    return cch;
   #else
    return wsprintf(pszName, TEXT("Tenant %lu"), m_dwID);
   #endif
    }



//CHAPTER17MOD
/*
 * CTenant::StorageGet
 *
 * Purpose:
 *  Returns the IStorage pointer maintained by this tenant,
 *  AddRef'd of course.
 *
 * Parameters:
 *  ppStg           LPSTORAGE * in which to return the pointer.
 *
 * Return Value:
 *  None
 */

void CTenant::StorageGet(LPSTORAGE *ppStg)
    {
    if (NULL==ppStg)
        return;

    *ppStg=m_pIStorage;

    if (NULL!=*ppStg)
        (*ppStg)->AddRef();

    return;
    }
//End CHAPTER17MOD




/*
 * CTenant::Create
 *
 * Purpose:
 *  Creates a new tenant of the given CLSID, which can be either a
 *  static bitmap or metafile or any compound document object.
 *
 * Parameters:
 *  tType           TENANTTYPE to create, either a static metafile,
 *                  bitmap, or some kind of compound document object
 *                  This determines which OleCreate* call we use.
 *  pvType          LPVOID providing the relevant pointer from which
 *                  to create the tenant, depending on iType.
 *  pFE             LPFORMATETC specifying the type of renderings
 *                  to use.
 *  pptl            PPOINTL in which we store offset coordinates.
 *  pszl            LPSIZEL where this object should store its
 *                  lometric extents.
 *  pIStorage       LPSTORAGE of the page we live in.  We have to
 *                  create another storage in this for the tenant.
 *  ppo             PPATRONOBJECT containing placement data.
 *  dwData          DWORD with extra data, sensitive to iType.
 *
 * Return Value:
 *  UINT            A CREATE_* value depending on what we
 *                  actually do.
 */

UINT CTenant::Create(TENANTTYPE tType, LPVOID pvType
    , LPFORMATETC pFE, PPOINTL pptl, LPSIZEL pszl
    , LPSTORAGE pIStorage, PPATRONOBJECT ppo, DWORD dwData)
    {
    HRESULT             hr;
    LPUNKNOWN           pObj;
    UINT                uRet=CREATE_GRAPHICONLY;
    //CHAPTER17MOD
    //Some things moves to ObjectInitialize
    //End CHAPTER17MOD

    if (NULL==pvType || NULL==pIStorage)
        return CREATE_FAILED;

    //Fail if this is called for an already living tenant.
    if (m_fInitialized)
        return CREATE_FAILED;

    m_fInitialized=TRUE;

    //Create a new storage for this tenant.
    if (!Open(pIStorage))
        return CREATE_FAILED;

    /*
     * Get the placement info if it's here.  We either have a non-
     * NULL PPATRONOBJECT in ppo or we have to use default
     * placement and retrieve the size from the object itself.
     */
    pszl->cx=0;
    pszl->cy=0;

    if (NULL!=ppo)
        {
        *pFE=ppo->fe;
        *pptl=ppo->ptl;
        *pszl=ppo->szl;     //Could be 0,0 , so we ask object

        uRet=CREATE_PLACEDOBJECT;
        }

    hr=ResultFromScode(E_FAIL);

    //Now create an object based specifically for the type.
    switch (tType)
        {
        case TENANTTYPE_NULL:
            break;

        case TENANTTYPE_STATIC:
            /*
             * We could use OleCreateStaticFromData here which does
             * pretty much what we're doing below.  However, it does
             * not allow us to control whether we paste a bitmap or
             * a metafile--it uses metafile first, bitmap second.
             * For this reason we'll use code developed in Chapter
             * 11's FreeLoader to affect the paste.
             */
            hr=CreateStatic((LPDATAOBJECT)pvType, pFE, &pObj);
            break;

        //CHAPTER17MOD
        case TENANTTYPE_EMBEDDEDOBJECT:
            hr=OleCreate(*((LPCLSID)pvType), IID_IUnknown
                , OLERENDER_DRAW, NULL, NULL, m_pIStorage
                , (PPVOID)&pObj);
            break;

        case TENANTTYPE_EMBEDDEDFILE:
            hr=OleCreateFromFile(CLSID_NULL, (LPTSTR)pvType
                , IID_IUnknown, OLERENDER_DRAW, NULL, NULL
                , m_pIStorage, (PPVOID)&pObj);
            break;

        case TENANTTYPE_EMBEDDEDOBJECTFROMDATA:
            hr=OleCreateFromData((LPDATAOBJECT)pvType, IID_IUnknown
                , OLERENDER_DRAW, NULL, NULL, m_pIStorage
                , (PPVOID)&pObj);
            break;
        //End CHAPTER17MOD

        default:
            break;
        }

    //If creation didn't work, get rid of the element Open created.
    if (FAILED(hr))
        {
        Destroy(pIStorage);
        return CREATE_FAILED;
        }

    //CHAPTER17MOD
    //We don't get the size if PatronObject data was seen already.
    if (!ObjectInitialize(pObj, pFE, dwData))
        {
        Destroy(pIStorage);
        return CREATE_FAILED;
        }

    if (0==pszl->cx && 0==pszl->cy)
        {
        SIZEL   szl;

        //Try to get the real size of the object, default to 2"*2"
        SETSIZEL((*pszl), 2*LOMETRIC_PER_INCH, 2*LOMETRIC_PER_INCH);
        hr=ResultFromScode(E_FAIL);

        //Try IViewObject2 first, then IOleObject as a backup.
        if (NULL!=m_pIViewObject2)
            {
            hr=m_pIViewObject2->GetExtent(m_fe.dwAspect, -1, NULL
                , &szl);
            }
        else
            {
            if (NULL!=m_pIOleObject)
                hr=m_pIOleObject->GetExtent(m_fe.dwAspect, &szl);
            }

        if (SUCCEEDED(hr))
            {
            //Convert HIMETRIC to our LOMETRIC mapping
            SETSIZEL((*pszl), szl.cx/10, szl.cy/10);
            }
        }
    //End CHAPTER17MOD

    return uRet;
    }






/*
 * CTenant::Load
 *
 * Purpose:
 *  Recreates the object living in this tenant in place of calling
 *  FCreate.  This is used in loading as opposed to new creation.
 *
 * Parameters:
 *  pIStorage       LPSTORAGE of the page we live in.
 *  pti             PTENTANTINFO containing persistent information.
 *                  The ID value in this structure is ignored.
 *
 * Return Value:
 *  BOOL            TRUE if successful, FALSE otherwise.
 */

BOOL CTenant::Load(LPSTORAGE pIStorage, PTENANTINFO pti)
    {
    HRESULT         hr;
    LPUNKNOWN       pObj;
    //CHAPTER17MOD
    DWORD           dwState=TENANTSTATE_DEFAULT;
    //End CHAPTER17MOD

    if (NULL==pIStorage || NULL==pti)
        return FALSE;

    //CHAPTER17MOD
    /*
     * If we already initialized once, clean up, releasing
     * everything before we attempt to reload.  This happens
     * when using the Convert Dialog.
     */
    if (m_fInitialized)
        {
        //Preserve all states except open
        dwState=(m_dwState & ~TENANTSTATE_OPEN);
        m_cRef++;   //Prevent accidental closure

        //This should release all holds on our IStorage as well.
        if (NULL!=m_pIViewObject2)
            {
            m_pIViewObject2->SetAdvise(m_fe.dwAspect, 0, NULL);
            ReleaseInterface(m_pIViewObject2);
            }

        ReleaseInterface(m_pIOleObject);
        ReleaseInterface(m_pObj);

        m_pIStorage=NULL;   //We'll have already released this.
        m_cRef--;           //Match safety increment above.
        }
    //End CHAPTER14MOD

    m_fInitialized=TRUE;

    //Open the storage for this tenant.
    if (!Open(pIStorage))
        return FALSE;

    hr=OleLoad(m_pIStorage, IID_IUnknown, NULL, (PPVOID)&pObj);

    if (FAILED(hr))
        {
        Destroy(pIStorage);
        return FALSE;
        }

    //CHAPTER17MOD
    m_fSetExtent=pti->fSetExtent;
    ObjectInitialize(pObj, &pti->fe, NULL);

    //Restore the original state before reloading.
    m_dwState=dwState;
    //End CHAPTER17MOD

    RectSet(&pti->rcl, FALSE, FALSE);
    return TRUE;
    }




/*
 * CTenant::GetInfo
 *
 * Purpose:
 *  Retrieved a TENANTINFO structure for this tenant.
 *
 * Parameters:
 *  pti             PTENANTINFO structure to fill
 *
 * Return Value:
 *  None
 */

void CTenant::GetInfo(PTENANTINFO pti)
    {
    if (NULL!=pti)
        {
        pti->dwID=m_dwID;
        pti->rcl=m_rcl;
        pti->fe=m_fe;
        pti->fSetExtent=m_fSetExtent;
        }

    return;
    }




//CHAPTER17MOD
/*
 * CTenant::ObjectInitialize
 * (Protected)
 *
 * Purpose:
 *  Performs operations necessary after creating an object or
 *  reloading one from storage.
 *
 * Parameters:
 *  pObj            LPUNKNOWN of the object in this tenant.
 *  pFE             LPFORMATETC describing the graphic here.
 *  dwData          DWORD extra data.  If pFE->dwAspect==
 *                  DVASPECT_ICON then this is the iconic metafile.
 *
 * Return Value:
 *  BOOL            TRUE if the function succeeded, FALSE otherwise.
 */

BOOL CTenant::ObjectInitialize(LPUNKNOWN pObj, LPFORMATETC pFE
    , DWORD dwData)
    {
    HRESULT         hr;
    LPPERSIST       pIPersist=NULL;
    DWORD           dw;
    PCDocument      pDoc;
    TCHAR           szFile[CCHPATHMAX];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
北岛玲一区二区三区四区| 国产精品丝袜一区| 中文字幕国产精品一区二区| 亚洲国产精品自拍| 国产精品一区二区三区网站| 欧美亚洲一区二区三区四区| 久久蜜桃av一区二区天堂| 欧美国产一区二区在线观看 | 欧美国产综合一区二区| 午夜精品免费在线| 不卡一二三区首页| 国产亚洲美州欧州综合国| 亚洲一二三四久久| 成人avav影音| 国产欧美一区二区三区网站| 精品一区二区三区欧美| 在线观看免费亚洲| 国产精品九色蝌蚪自拍| 国产精品一区在线| 久久亚洲精华国产精华液| 日韩主播视频在线| 91黄色免费看| 一区二区视频在线| 99久久精品国产网站| 国产片一区二区| 国产宾馆实践打屁股91| 日韩一级黄色大片| 日本成人在线网站| 91精品在线免费观看| 亚洲18女电影在线观看| 一本大道久久a久久精二百| 最新高清无码专区| 99免费精品视频| 国产日韩精品一区二区三区| 国产精品综合久久| 久久久天堂av| 国产精品2024| 国产精品嫩草久久久久| 成人在线综合网站| 中文字幕中文乱码欧美一区二区| 成人性生交大片| 中文字幕五月欧美| 91国内精品野花午夜精品| 亚洲一区av在线| 884aa四虎影成人精品一区| 丝袜美腿亚洲综合| 欧美mv日韩mv亚洲| 国产九色sp调教91| 亚洲视频一区二区在线| 在线一区二区观看| 天天色天天爱天天射综合| 欧美一级在线观看| 国产成人在线看| 一区二区三区精品| 欧美福利电影网| 精品一区二区三区久久| 欧美激情综合在线| 日本韩国精品在线| 午夜日韩在线观看| 久久色成人在线| 波多野结衣在线aⅴ中文字幕不卡| 亚洲免费av观看| 欧美一区二区黄| 成人久久视频在线观看| 亚洲国产欧美在线| 久久影院电视剧免费观看| 成人在线综合网| 三级一区在线视频先锋| 久久久蜜桃精品| 日韩午夜中文字幕| 亚洲在线视频一区| 精品国产成人在线影院| 99久久婷婷国产| 日韩av一区二区在线影视| 欧美韩国日本不卡| 555www色欧美视频| 成人一区二区三区在线观看| 亚洲国产乱码最新视频 | 亚洲永久免费av| 亚洲精品在线网站| 欧洲精品在线观看| 国产一区二区三区在线观看免费| 日韩码欧中文字| 欧美大胆一级视频| 欧美色涩在线第一页| 国内精品第一页| 亚洲第一狼人社区| 亚洲少妇30p| 久久综合九色综合97_久久久| 欧美日韩一级二级| 91丝袜美腿高跟国产极品老师 | 亚洲成人资源网| 国产精品乱人伦一区二区| 91精品国产综合久久久久久漫画| 91丨国产丨九色丨pron| 国产精品主播直播| 美女高潮久久久| 午夜精品福利一区二区三区av | 午夜私人影院久久久久| 亚洲欧洲日产国码二区| 久久这里只精品最新地址| 欧美精品自拍偷拍动漫精品| 国产福利一区二区三区| 一本大道av一区二区在线播放| 国模套图日韩精品一区二区| 日韩和欧美的一区| 亚洲国产色一区| 亚洲免费观看高清完整版在线观看 | 亚洲男人的天堂在线观看| 中文字幕不卡在线播放| 久久综合精品国产一区二区三区| 69堂成人精品免费视频| 欧美日韩日日骚| 欧美日韩在线播放三区四区| 色哟哟一区二区三区| 一本大道av一区二区在线播放| av爱爱亚洲一区| 91在线播放网址| 99久久综合色| 91麻豆.com| 色婷婷久久久久swag精品| 色一情一乱一乱一91av| 91麻豆国产福利精品| 一本大道久久a久久综合婷婷 | 国产91在线|亚洲| 国产成a人亚洲精| 成人av影院在线| 91一区二区三区在线观看| 99久久er热在这里只有精品66| eeuss影院一区二区三区| av不卡在线观看| 91国产精品成人| 91麻豆精品国产91久久久资源速度| 欧美精品乱码久久久久久按摩| 91精品国产全国免费观看| 欧美大片一区二区三区| 国产亚洲污的网站| 中文字幕综合网| 亚洲精品成人悠悠色影视| 亚洲夂夂婷婷色拍ww47| 日产精品久久久久久久性色| 国内精品国产成人国产三级粉色| 日本二三区不卡| 成人午夜激情在线| 色噜噜狠狠色综合欧洲selulu| 欧美天天综合网| 日韩美女在线视频| 久久精品欧美一区二区三区不卡 | 日韩一二三区视频| 久久精品综合网| 亚洲精品成人悠悠色影视| 日韩成人午夜精品| 国产 日韩 欧美大片| 色欲综合视频天天天| 欧美大片在线观看一区二区| 综合欧美亚洲日本| 精品在线你懂的| 色噜噜狠狠色综合欧洲selulu| 欧美成人三级电影在线| 国产精品久久久久影院| 日日骚欧美日韩| 91一区二区在线| 欧美mv日韩mv国产网站app| 国产精品成人网| 老汉av免费一区二区三区| 91免费看片在线观看| 精品久久久久久久久久久久久久久久久| 日本一区免费视频| 奇米精品一区二区三区四区| 99re热这里只有精品免费视频| 欧美电影免费观看完整版| 亚洲欧美色一区| 国产激情91久久精品导航 | 亚洲第一会所有码转帖| 成人动漫中文字幕| 日韩精品中文字幕在线不卡尤物| 亚洲精品美国一| 成人在线一区二区三区| 精品国产一区二区三区四区四| 一区二区视频免费在线观看| 成人毛片视频在线观看| 久久亚洲精精品中文字幕早川悠里 | 豆国产96在线|亚洲| 欧美精品久久久久久久久老牛影院| 久久久午夜电影| 亚洲第一久久影院| 91福利资源站| 国产精品国产三级国产普通话99| 国产网红主播福利一区二区| 美女网站视频久久| 在线观看免费亚洲| 国产精品灌醉下药二区| 午夜视黄欧洲亚洲| 色综合天天性综合| 久久久精品国产免大香伊 | 91天堂素人约啪| 久久亚洲精华国产精华液| 日精品一区二区三区| 欧美日韩激情在线| 亚洲日本一区二区三区|