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

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

?? tenant.cpp

?? 英文版的 想要的話可以下載了 為大家服務(wù)
?? CPP
?? 第 1 頁 / 共 4 頁
字號(hào):
    if (NULL==pObj || NULL==pFE)
        return FALSE;

    m_pObj=pObj;
    m_fe=*pFE;
    m_fe.ptd=NULL;
    m_dwState=TENANTSTATE_DEFAULT;

    /*
     * Determine the type:  Static or Embedded.  If Static,
     * this will have CLSID_Picture_Metafile or CLSID_Picture_Dib.
     * Otherwise it's embedded.  Later we'll add a case for links.
     */
    m_tType=TENANTTYPE_EMBEDDEDOBJECT;

    if (SUCCEEDED(pObj->QueryInterface(IID_IPersist
        , (PPVOID)&pIPersist)))
        {
        CLSID   clsid=CLSID_NULL;

        hr=pIPersist->GetClassID(&clsid);

        //If we don't have a CLSID, default to static
        if (FAILED(hr) || CLSID_Picture_Metafile==clsid
            || CLSID_Picture_Dib==clsid)
            m_tType=TENANTTYPE_STATIC;

        pIPersist->Release();
        }


    m_pIViewObject2=NULL;
    hr=pObj->QueryInterface(IID_IViewObject2
        , (PPVOID)&m_pIViewObject2);

    if (FAILED(hr))
        return FALSE;

    m_pIViewObject2->SetAdvise(m_fe.dwAspect, 0, m_pImpIAdviseSink);

    //We need an IOleObject most of the time, so get one here.
    m_pIOleObject=NULL;
    hr=pObj->QueryInterface(IID_IOleObject
         , (PPVOID)&m_pIOleObject);

    /*
     * Follow up object creation with advises and so forth.  If
     * we cannot get IOleObject here, then we know we can't do
     * any IOleObject actions from here on--object is static.
     */
    if (FAILED(hr))
        return TRUE;

    /*
     * Get the MiscStatus bits and check for OLEMISC_ONLYICONIC.
     * If set, force dwAspect in m_fe to DVASPECT_ICON so we
     * remember to draw it properly and do extents right.
     */
    m_pIOleObject->GetMiscStatus(m_fe.dwAspect, &m_grfMisc);

    if (OLEMISC_ONLYICONIC & m_grfMisc)
        m_fe.dwAspect=DVASPECT_ICON;

    /*
     * We could pass m_pImpIOleClientSite in an OleCreate* call, but
     * since this function could be called after OleLoad, we still
     * need to do this here, so it's always done here...
     */
    m_pIOleObject->SetClientSite(m_pImpIOleClientSite);
    m_pIOleObject->Advise(m_pImpIAdviseSink, &dw);

    OleSetContainedObject(m_pIOleObject, TRUE);

    /*
     * For IOleObject::SetHostNames we need the application name
     * and the document name (which is passed in the object
     * parameter).  The design of Patron doesn't give us nice
     * structured access to the name of the document we're in, so
     * I grab the parent of the Pages window (the document) and
     * send it DOCM_PDOCUMENT which returns us the pointer.
     * Roundabout, but it works.
     */

    pDoc=(PCDocument)SendMessage(GetParent(m_hWnd), DOCM_PDOCUMENT
        , 0, 0L);

    if (NULL!=pDoc)
        pDoc->FilenameGet(szFile, CCHPATHMAX);
    else
        szFile[0]=0;

    NotifyOfRename(szFile, NULL);


    /*
     * If we're creating an iconic aspect object and we have
     * an object from the Insert Object dialog, then we need to
     * store that iconic presentation in the cache, handled
     * with the utility function INOLE_SwitchDisplayAspect.  In
     * this case dwData is a handle to the metafile containing
     * the icon.  If dwData is NULL then we depend on the
     * server to provide the aspect, in which case we need
     * a view advise.
     */

    if (DVASPECT_ICON & m_fe.dwAspect)
        {
        DWORD           dw=DVASPECT_CONTENT;
        IAdviseSink    *pSink;

        pSink=(NULL==dwData) ? NULL : m_pImpIAdviseSink;

        INOLE_SwitchDisplayAspect(m_pIOleObject, &dw
            , DVASPECT_ICON, (HGLOBAL)(UINT)dwData, FALSE
            , (NULL!=dwData), pSink, NULL);
        }

    return TRUE;
    }
//End CHAPTER17MOD




/*
 * CTenant::Open
 *
 * Purpose:
 *  Retrieves the IStorage associated with this tenant.  The
 *  IStorage is owned by the tenant and thus the tenant always
 *  holds a reference count.
 *
 *  If the storage is already open for this tenant, then this
 *  function will AddRef it; therefore the caller must always
 *  match an Open with a Close.
 *
 * Parameters:
 *  pIStorage       LPSTORAGE above this tenant (which has its
 *                  own storage).
 *
 * Return Value:
 *  BOOL            TRUE if opening succeeds, FALSE otherwise.
 */

BOOL CTenant::Open(LPSTORAGE pIStorage)
    {
    HRESULT     hr=NOERROR;
    DWORD       dwMode=STGM_TRANSACTED | STGM_READWRITE
                    | STGM_SHARE_EXCLUSIVE;
    OLECHAR     szTemp[32];

    if (NULL==m_pIStorage)
        {
        if (NULL==pIStorage)
            return FALSE;

        /*
         * Attempt to open the storage under this ID.  If there is
         * none, then create it.  In either case we end up with an
         * IStorage that we either save in pPage or release.
         */

        GetStorageName(szTemp);
        hr=pIStorage->OpenStorage(szTemp, NULL, dwMode, NULL, 0
            , &m_pIStorage);

        if (FAILED(hr))
            {
            hr=pIStorage->CreateStorage(szTemp, dwMode, 0, 0
                , &m_pIStorage);
            }
        }
    else
        m_pIStorage->AddRef();

    if (FAILED(hr))
        return FALSE;

    m_cOpens++;

    //CHAPTER17MOD
    //Create these if we don't have them already.
    if (NULL==m_pImpIOleClientSite && NULL==m_pImpIAdviseSink)
        {
        m_pImpIOleClientSite=new CImpIOleClientSite(this, this);
        m_pImpIAdviseSink=new CImpIAdviseSink(this, this);

        if (NULL==m_pImpIOleClientSite || NULL==m_pImpIAdviseSink)
            return FALSE;
        }
    //End CHAPTER17MOD

    return TRUE;
    }




/*
 * CTenant::Close
 *
 * Purpose:
 *  Possibly commits the storage, then releases it reversing the
 *  reference count from Open.  If the reference on the storage
 *  goes to zero, the storage is forgotten.  However, the object we
 *  contain is still held and as long as it's active the storage
 *  remains alive.
 *
 * Parameters:
 *  fCommit         BOOL indicating if we're to commit.
 *
 * Return Value:
 *  None
 */

void CTenant::Close(BOOL fCommit)
    {
    if (fCommit)
        Update();

    if (NULL!=m_pIStorage)
        {
        m_pIStorage->Release();

        /*
         * We can't use a zero reference count to know when to NULL
         * this since other things might have AddRef'd the storage.
         */
        //CHAPTER17MOD
        if (0==--m_cOpens)
            {
            m_pIStorage=NULL;

            //Close the object saving if necessary
            if (NULL!=m_pIOleObject)
                {
                m_pIOleObject->Close(OLECLOSE_SAVEIFDIRTY);
                ReleaseInterface(m_pIOleObject);
                }

            //Release all other held pointers
            if (NULL!=m_pIViewObject2)
                {
                m_pIViewObject2->SetAdvise(m_fe.dwAspect, 0, NULL);
                ReleaseInterface(m_pIViewObject2);
                }

            //We know we only hold one ref from Create or Load
            ReleaseInterface(m_pObj);
            }
        //End CHAPTER17MOD
        }

    return;
    }




/*
 * CTenant::Update
 *
 * Purpose:
 *  Forces a common on the page if it's open.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  BOOL            TRUE if the object is open, FALSE otherwise.
 */

BOOL CTenant::Update(void)
    {
    LPPERSISTSTORAGE    pIPS;

    if (NULL!=m_pIStorage)
        {
        /*
         * We need to OleSave again because we might have changed
         * the size or position of this tenant.  We also need to
         * save the rectangle on the page, since that's not known
         * to OLE.
         */
        m_pObj->QueryInterface(IID_IPersistStorage, (PPVOID)&pIPS);

        //This fails for static objects...so we improvise if so
        if (FAILED(OleSave(pIPS, m_pIStorage, TRUE)))
            {
            //This is essentially what OleSave does.
            WriteClassStg(m_pIStorage, m_clsID);
            pIPS->Save(m_pIStorage, TRUE);
            }

        pIPS->SaveCompleted(NULL);
        pIPS->Release();

        m_pIStorage->Commit(STGC_DEFAULT);
        }

    return FALSE;
    }





/*
 * CTenant::Destroy
 *
 * Purpose:
 *  Removes this page from the given storage.  The caller should
 *  eventually delete this CTenant object to free the object herein.
 *  Nothing is committed when being destroyed.
 *
 * Parameters:
 *  pIStorage       LPSTORAGE contianing this page on which to call
 *                  DestroyElement
 *
 * Return Value:
 *  None
 */

void CTenant::Destroy(LPSTORAGE pIStorage)
    {
    OLECHAR     szTemp[32];

    if (NULL!=pIStorage)
        {
        //CHAPTER17MOD
        if (NULL!=m_pIOleObject)
            m_pIOleObject->Close(OLECLOSE_NOSAVE);
        //End CHAPTER17MOD

        if (NULL!=m_pIStorage)
            {
            //Remove all reference/open counts on this storage.
            while (0!=m_cOpens)
                {
                m_pIStorage->Release();
                m_cOpens--;
                }
            }

        GetStorageName(szTemp);
        pIStorage->DestroyElement(szTemp);

        m_pIStorage=NULL;
        }

    return;
    }




/*
 * CTenant::Select
 *
 * Purpose:
 *  Selects or deselects the tenant.
 *
 * Parameters:
 *  fSelect         BOOL indicating the new state of the tenant.
 *
 * Return Value:
 *  None
 */

void CTenant::Select(BOOL fSelect)
    {
    BOOL        fWasSelected;
    DWORD       dwState;
    RECT        rc;
    HDC         hDC;

    fWasSelected=(BOOL)(TENANTSTATE_SELECTED & m_dwState);

    //Nothing to do when there's no change.
    if (fWasSelected==fSelect)
        return;

    dwState=m_dwState & ~TENANTSTATE_SELECTED;
    m_dwState=dwState | ((fSelect) ? TENANTSTATE_SELECTED : 0);

    /*
     * Draw sizing handles to show the selection state.  We convert
     * things to MM_TEXT since that's what this function expects.
     */

    RECTFROMRECTL(rc, m_rcl);
    RectConvertMappings(&rc, NULL, TRUE);
    OffsetRect(&rc, -(int)m_pPG->m_xPos, -(int)m_pPG->m_yPos);

    hDC=GetDC(m_hWnd);

    UIDrawHandles(&rc, hDC, UI_HANDLES_INSIDE
        | UI_HANDLES_NOBORDER | UI_HANDLES_USEINVERSE
        , CXYHANDLE, !fWasSelected);

    ReleaseDC(m_hWnd, hDC);

    if (fSelect)
        m_pPG->m_fDirty=TRUE;

    return;
    }




//CHAPTER17MOD
/*
 * CTenant::ShowAsOpen
 *
 * Purpose:
 *  Draws or removes the hatch pattern over an object.
 *
 * Parameters:
 *  fOpen           BOOL indicating the open state of this tenant.
 *
 * Return Value:
 *  None
 */

void CTenant::ShowAsOpen(BOOL fOpen)
    {
    BOOL        fWasOpen;
    DWORD       dwState;
    RECT        rc;
    HDC         hDC;

    fWasOpen=(BOOL)(TENANTSTATE_OPEN & m_dwState);

    dwState=m_dwState & ~TENANTSTATE_OPEN;
    m_dwState=dwState | ((fOpen) ? TENANTSTATE_OPEN : 0);

    //If this was not open, then just hatch, otherwise repaint.
    if (!fWasOpen && fOpen)
        {
        RECTFROMRECTL(rc, m_rcl);
        RectConvertMappings(&rc, NULL, TRUE);
        OffsetRect(&rc, -(int)m_pPG->m_xPos, -(int)m_pPG->m_yPos);

        hDC=GetDC(m_hWnd);
        UIDrawShading(&rc, hDC, UI_SHADE_FULLRECT, 0);
        ReleaseDC(m_hWnd, hDC);
        }

    if (fWasOpen && !fOpen)
        Repaint();

    return;
    }





/*
 * CTenant::ShowYourself
 *
 * Purpose:
 *  Function that really just implements IOleClientSite::ShowObject.
 *  Here we first check if the tenant is fully visible, and if so,
 *  then nothing needs to happen.  Otherwise, if the upper left
 *  corner of the tenant is in the upper left visible quadrant of
 *  the window, we'll also consider ourselves done.  Otherwise
 *  we'll put the upper left corner of the object at the upper left
 *  corner of the window.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  None
 */

void CTenant::ShowYourself(void)
    {
    RECTL       rcl;
    RECT        rc;
    POINT       pt1, pt2;

    //Scrolling deals in device units; get our rectangle in those.
    RectGet(&rcl, TRUE);

    //Get the window rectangle offset for the current scroll pos.
    GetClientRect(m_hWnd, &rc);
    OffsetRect(&rc, m_pPG->m_xPos, m_pPG->m_yPos);

    //Check if the object is already visible. (macro in bookguid.h)
    SETPOINT(pt1, (int)rcl.left,  (int)rcl.top);
    SETPOINT(pt2, (int)rcl.right, (int)rcl.bottom);

    if (PtInRect(&rc, pt1) && PtInRect(&rc, pt2))
        return;

    //Check if the upper left is within the upper left quadrant
    if (((int)rcl.left > rc.left
        && (int)rcl.left < ((rc.right+rc.left)/2))
        && ((int)rcl.top > rc.top
        && (int)rcl.top < ((rc.bottom+rc.top)/2)))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆视频一区二区| 一区二区三区四区不卡视频| 欧美精品一区二区三区蜜桃| 精品久久久久99| 欧美一区在线视频| 欧美日韩成人高清| av电影在线观看一区| 91老师片黄在线观看| 成人免费视频视频在线观看免费 | 日韩视频一区二区三区在线播放| 日本欧美在线观看| 亚洲成人自拍一区| 美女久久久精品| 久久精品国产久精国产| 久久国产精品99久久久久久老狼| 免费在线一区观看| 91色|porny| 精品一区二区免费| 夫妻av一区二区| 91福利在线观看| 日韩欧美www| 日韩亚洲欧美成人一区| 日韩欧美精品三级| 精品福利一二区| 亚洲女同女同女同女同女同69| 亚洲天堂2014| 国产精品国产三级国产a| 亚洲激情图片一区| 亚洲免费电影在线| 视频在线在亚洲| 99精品视频一区| 91精品国产欧美日韩| 国产亚洲精品超碰| 亚洲成人综合网站| 成人午夜电影网站| 在线观看一区二区视频| 国产日韩精品久久久| 亚洲一区二区三区视频在线| 六月婷婷色综合| 色婷婷av一区二区三区软件| 欧美日韩精品系列| 日韩午夜激情av| 日韩高清中文字幕一区| 99精品视频免费在线观看| 久久天天做天天爱综合色| 国产亚洲欧美日韩在线一区| 亚洲国产人成综合网站| eeuss国产一区二区三区| 精品视频123区在线观看| 在线不卡a资源高清| 亚洲午夜电影在线| 99re视频精品| 国产精品欧美精品| 国产一区二区三区免费看| 精品国产a毛片| 亚洲电影在线免费观看| 97精品视频在线观看自产线路二| 精品日韩欧美在线| 成人理论电影网| 国产精品萝li| 国产+成+人+亚洲欧洲自线| 欧美精品第1页| 狠狠v欧美v日韩v亚洲ⅴ| 欧美精选一区二区| 亚洲四区在线观看| 色婷婷精品久久二区二区蜜臂av| 久久综合九色综合欧美98| 加勒比av一区二区| 久久久亚洲国产美女国产盗摄| 国产自产视频一区二区三区| 久久久国产一区二区三区四区小说| 美美哒免费高清在线观看视频一区二区| 这里是久久伊人| 精品影视av免费| 国产精品人妖ts系列视频| 欧美亚洲一区二区三区四区| 久久精品国产**网站演员| 国产亚洲一区二区三区四区| 99国产精品99久久久久久| 亚洲视频在线观看一区| 欧洲色大大久久| 免费观看日韩av| 国产精品第四页| 91精品国产色综合久久ai换脸| 高清成人免费视频| 日本aⅴ亚洲精品中文乱码| 国产精品天干天干在线综合| 欧美一区二区三区在线观看视频 | 久久影院午夜片一区| 欧美亚洲高清一区二区三区不卡| 国模套图日韩精品一区二区| 亚洲国产精品久久久久婷婷884| 久久午夜免费电影| 欧美喷水一区二区| 99久久99久久精品免费看蜜桃| 一区二区日韩av| 91.麻豆视频| 日本电影亚洲天堂一区| 国产一区二区三区av电影| 天天影视网天天综合色在线播放| 国产精品美女久久久久久久久久久 | 亚洲成人一区在线| 欧美极品少妇xxxxⅹ高跟鞋| 欧美喷水一区二区| 欧美日韩精品欧美日韩精品一 | 99久久婷婷国产| 粉嫩一区二区三区性色av| 国产一区二区三区av电影 | 色女孩综合影院| 91女神在线视频| 91久久精品午夜一区二区| 成人高清视频在线观看| 91丨九色丨蝌蚪富婆spa| 欧美日韩综合一区| 69堂成人精品免费视频| 精品对白一区国产伦| 欧美精品一区二区高清在线观看| 欧美成人三级在线| 国产精品福利一区| 亚洲成人免费av| 国产成人日日夜夜| 欧美在线观看一二区| 欧美一级国产精品| 国产精品久久久久久久久免费丝袜| 亚洲精品中文字幕在线观看| 日精品一区二区三区| 成人黄色片在线观看| 欧美日韩mp4| 日韩手机在线导航| 亚洲午夜电影在线观看| 日本道在线观看一区二区| 亚洲男人天堂av网| av电影在线观看一区| www一区二区| 精品一区二区三区欧美| 精品久久久久久久久久久院品网 | 国产精品久久久久久久久图文区| 国产精品一区久久久久| 国产日产精品1区| 亚洲欧洲成人精品av97| 免费在线成人网| 在线观看视频一区二区欧美日韩| 亚洲国产精品精华液ab| 精品一区二区免费在线观看| 日韩一区二区三区视频| 亚洲成人一区二区| 777xxx欧美| 久久99精品国产麻豆婷婷| 日韩欧美国产一二三区| 日本不卡一区二区三区高清视频| 91成人在线免费观看| 中文字幕色av一区二区三区| 成人免费毛片片v| 日韩毛片视频在线看| 色婷婷av一区二区| 亚洲成人午夜电影| 91麻豆精品91久久久久同性| 久久精品国产久精国产爱| 日韩欧美第一区| 国产成人精品三级| 国产精品女上位| 欧美探花视频资源| 蜜臀av在线播放一区二区三区| 精品精品国产高清a毛片牛牛 | 欧美国产日产图区| 99久久综合国产精品| 亚洲午夜影视影院在线观看| 欧美日韩视频在线观看一区二区三区 | 欧美日韩成人综合在线一区二区| 亚洲午夜免费视频| 久久亚洲综合色一区二区三区| 波多野结衣的一区二区三区| 国产欧美精品国产国产专区| 国产二区国产一区在线观看| 欧美一区二区在线免费观看| 亚洲激情在线激情| 欧美天天综合网| 一区二区国产盗摄色噜噜| 色综合视频一区二区三区高清| 国产精品国产三级国产有无不卡| av电影在线不卡| 日本成人在线看| 1024亚洲合集| 久久久99免费| 在线不卡欧美精品一区二区三区| 日本欧美一区二区在线观看| 欧美日韩三级在线| 国产精品自拍毛片| 日韩一卡二卡三卡四卡| 成人午夜在线播放| 亚洲少妇30p| 欧美在线影院一区二区| 亚洲一区二区三区在线播放| 日韩一级二级三级| 色噜噜狠狠色综合中国| 黄页网站大全一区二区| 亚洲国产wwwccc36天堂| 国产精品欧美极品| 国产色综合久久| 日韩欧美高清dvd碟片|