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

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

?? droptgt.cpp

?? 英文版的 想要的話可以下載了 為大家服務(wù)
?? CPP
字號:
/*
 * DROPTGT.CPP
 * Patron Chapter 21
 *
 * Implementation of a DropTarget object
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "patron.h"


/*
 * CDropTarget::CDropTarget
 * CDropTarget::~CDropTarget
 *
 * Constructor Parameters:
 *  pDoc            PCPatronDoc of the window containing us.
 */

CDropTarget::CDropTarget(PCPatronDoc pDoc)
    {
    m_cRef=0;
    m_pDoc=pDoc;

    m_pIDataObject=NULL;
    return;
    }


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




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

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

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

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

    return ResultFromScode(E_NOINTERFACE);
    }


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

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

    delete this;
    return 0;
    }





/*
 * CDropTarget::DragEnter
 *
 * Purpose:
 *  Indicates that data in a drag operation has been dragged over
 *  our window that's a potential target.  We are to decide if it's
 *  something in which we're interested.
 *
 * Parameters:
 *  pIDataSource    LPDATAOBJECT providing the source data.
 *  grfKeyState     DWORD flags: states of keys and mouse buttons.
 *  pt              POINTL coordinates in the client space of
 *                  the document.
 *  pdwEffect       LPDWORD into which we'll place the appropriate
 *                  effect flag for this point.
 *
 * Return Value:
 *  HRESULT         NOERROR
 */

STDMETHODIMP CDropTarget::DragEnter(LPDATAOBJECT pIDataSource
    , DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
    {
    PCPages         ppg=m_pDoc->m_pPG;
    HWND            hWnd;
    FORMATETC       fe;
    STGMEDIUM       stm;
    UINT            uRet;

    m_fFeedback=FALSE;
    m_pIDataObject=NULL;

    if (!m_pDoc->FQueryPasteFromData(pIDataSource, &fe, NULL))
        {
        *pdwEffect=DROPEFFECT_NONE;
        return NOERROR;
        }

    //Check if we can link from this data object as well.
    ppg->m_fLinkAllowed
        =(NOERROR==OleQueryLinkFromData(pIDataSource));

    //We never allow it dragging in ourselves.
    ppg->m_fLinkAllowed &= !ppg->m_fDragSource;

    //Check if this is a valid drop point.
    uRet=ppg->UTestDroppablePoint(&pt);
    ppg->m_uLastTest=uRet;

    if (UDROP_NONE==uRet)
        *pdwEffect=DROPEFFECT_NONE;
    else
        {
        //Default is move if we can, in fact drop here.
        *pdwEffect=DROPEFFECT_MOVE;

        if (grfKeyState & MK_CONTROL)
            {
            if (ppg->m_fLinkAllowed && (grfKeyState & MK_SHIFT))
                *pdwEffect=DROPEFFECT_LINK;
            else
                *pdwEffect=DROPEFFECT_COPY;
            }
        }

    m_pIDataObject=pIDataSource;
    m_pIDataObject->AddRef();

    /*
     * Determine the size of the data, if we can.  The default is
     * a small rectangle since we can't easily tell what size
     * something will be if we're pulling in a metafile or bitmap.
     * It's not a good idea to render it here with GetData just to
     * find that out. We only know the size if it's our own object
     * in which case a GetData will be fast.
     */

    if (fe.cfFormat==m_pDoc->m_cf)
        {
        if (SUCCEEDED(pIDataSource->GetData(&fe, &stm)))
            {
            PPATRONOBJECT   ppo;
            RECT            rc;

            ppo=(PPATRONOBJECT)GlobalLock(stm.hGlobal);

            SetRect(&rc, (int)ppo->szl.cx, -(int)ppo->szl.cy, 0, 0);
            RectConvertMappings(&rc, NULL, TRUE);
            SETSIZEL(m_szl, rc.left, rc.top);

            m_ptPick=ppo->ptlPick;
            m_fe=ppo->fe;

            GlobalUnlock(stm.hGlobal);
            ReleaseStgMedium(&stm);
            }
        }
    else
        {
        SETSIZEL(m_szl, 30, 30);
        m_ptPick.x=0;
        m_ptPick.y=0;
        m_fe.cfFormat=0;

        /*
         * Try to get CFSTR_OBJECTDESCRIPTOR which might have a size
         * and a pick point.  If it exists, then always use the
         * point but still default to a 30*30 size if the sizes
         * are zero.
         */
        uRet=RegisterClipboardFormat(CFSTR_OBJECTDESCRIPTOR);
        SETDefFormatEtc(fe, uRet, TYMED_HGLOBAL);

        if (SUCCEEDED(pIDataSource->GetData(&fe, &stm)))
            {
            LPOBJECTDESCRIPTOR  pOD;

            pOD=(LPOBJECTDESCRIPTOR)GlobalLock(stm.hGlobal);

            //Get the size, converting to LOMETRIC.
            if (0!=pOD->sizel.cx && 0!=pOD->sizel.cy)
                {
                XformSizeInHimetricToPixels(NULL, &pOD->sizel
                    , &m_szl);
                }

            //POINTL and SIZEL are interchangeable
            XformSizeInHimetricToPixels(NULL, (LPSIZEL)&pOD->pointl
                , (LPSIZEL)&m_ptPick);

            GlobalUnlock(stm.hGlobal);
            ReleaseStgMedium(&stm);
            }
        }


    //Bring the document window up front, show what a drop will do.
    hWnd=m_pDoc->Window();
    BringWindowToTop(hWnd);
    UpdateWindow(hWnd);

    ppg->m_uVScrollCode=NOVALUE;
    ppg->m_uHScrollCode=NOVALUE;
    m_fPendingRepaint=FALSE;

    pt.x-=m_ptPick.x;
    pt.y-=m_ptPick.y;

    m_ptLast=pt;
    m_fFeedback=TRUE;
    ppg->DrawDropTargetRect(&pt, &m_szl);

    return NOERROR;
    }






/*
 * CDropTarget::DragOver
 *
 * Purpose:
 *  Indicates that the mouse was moved inside the window represented
 *  by this drop target.  This happens on every WM_MOUSEMOVE, so
 *  this function should be very efficient.
 *
 * Parameters:
 *  grfKeyState     DWORD providing the current keyboard and
 *                  mouse states
 *  pt              POINTL where the mouse currently is.
 *  pdwEffect       LPDWORD in which to store the effect flag
 *                  for this point.
 *
 * Return Value:
 *  HRESULT         NOERROR
 */

STDMETHODIMP CDropTarget::DragOver(DWORD grfKeyState, POINTL pt
    , LPDWORD pdwEffect)
    {
    PCPages     ppg=m_pDoc->m_pPG;
    UINT        uRet, uLast;
    UINT        xPos, yPos;

    *pdwEffect=DROPEFFECT_NONE;

    if (NULL==m_pIDataObject)
        return NOERROR;

    //Check if this is still a valid point.  uRet used below as well
    uRet=ppg->UTestDroppablePoint(&pt);

    if (UDROP_NONE==uRet)
        *pdwEffect=DROPEFFECT_NONE;
    else
        {
        //Store these before possibly ORing in DROPEFFECT_SCROLL
        *pdwEffect=DROPEFFECT_MOVE;

        if (grfKeyState & MK_CONTROL)
            {
            if (ppg->m_fLinkAllowed && (grfKeyState & MK_SHIFT))
                *pdwEffect=DROPEFFECT_LINK;
            else
                *pdwEffect=DROPEFFECT_COPY;
            }
        }

    //If we haven't moved and we are not scrolling, then we're done.
    if ((pt.x-m_ptPick.x==m_ptLast.x)
        && (pt.y-m_ptPick.y==m_ptLast.y)
        && !((UDROP_INSETHORZ|UDROP_INSETVERT) & ppg->m_uLastTest))
        {
        return NOERROR;
        }

    //Remove the last feedback rectangle.
    if (m_fFeedback)
        ppg->DrawDropTargetRect(&m_ptLast, &m_szl);

    uLast=ppg->m_uLastTest;
    ppg->m_uLastTest=uRet;

    if (UDROP_NONE==uRet)
        {
        //If we're now an invalid point, better repaint as necessary
        if (m_fPendingRepaint)
            {
            UpdateWindow(ppg->m_hWnd);
            m_fPendingRepaint=FALSE;
            }

        ppg->m_uVScrollCode=NOVALUE;
        ppg->m_uHScrollCode=NOVALUE;
        m_fFeedback=FALSE;
        return NOERROR;
        }


    /*
     * Scrolling is a little tricky:  We get a DragOver pulse even
     * if we didn't move.  First we have to delay scrolling for
     * ppg->m_uScrollDelay clock ticks which we can determine using
     * GetTickCount.  Timers do not work here since we may not be
     * yielding to our message loop.
     *
     * Once we know we are scrolling then we determine if we
     * scroll again or if we reset the scrolling state.
     */

    if ((UDROP_INSETHORZ & uLast) && !(UDROP_INSETHORZ & uRet))
        ppg->m_uHScrollCode=NOVALUE;

    if (!(UDROP_INSETHORZ & uLast) && (UDROP_INSETHORZ & uRet))
        {
        ppg->m_dwTimeLast=GetTickCount();
        ppg->m_uHScrollCode=(0!=(UDROP_INSETLEFT & uRet))
            ? SB_LINELEFT : SB_LINERIGHT; //Same as UP & DOWN codes.
        }

    if ((UDROP_INSETVERT & uLast) && !(UDROP_INSETVERT & uRet))
        ppg->m_uVScrollCode=NOVALUE;

    if (!(UDROP_INSETVERT & uLast) && (UDROP_INSETVERT & uRet))
        {
        ppg->m_dwTimeLast=GetTickCount();
        ppg->m_uVScrollCode=(0!=(UDROP_INSETTOP & uRet))
            ? SB_LINEUP : SB_LINEDOWN;
        }

    //Only change the last time if ALL scrolling stops.
    if (NOVALUE==ppg->m_uHScrollCode && NOVALUE==ppg->m_uVScrollCode)
        ppg->m_dwTimeLast=0L;

    //Set the scroll effect on any inset hit.
    if ((UDROP_INSETHORZ | UDROP_INSETVERT) & uRet)
        *pdwEffect |= DROPEFFECT_SCROLL;

    xPos=ppg->m_xPos;
    yPos=ppg->m_yPos;

    //Has the delay elapsed?  We can scroll if so
    if (ppg->m_dwTimeLast!=0
        && (GetTickCount()-ppg->m_dwTimeLast)
        > (DWORD)ppg->m_uScrollDelay)
        {
        if (NOVALUE!=ppg->m_uHScrollCode)
            {
            m_fPendingRepaint=TRUE;
            SendMessage(ppg->m_hWnd, WM_HSCROLL
                , ppg->m_uHScrollCode, 0L);
            }

        if (NOVALUE!=ppg->m_uVScrollCode)
            {
            m_fPendingRepaint=TRUE;
            SendMessage(ppg->m_hWnd, WM_VSCROLL
                , ppg->m_uVScrollCode, 0L);
            }
        }

    //If we didn't scroll but have a pending repaint, do it now.
    if (xPos==ppg->m_xPos && yPos==ppg->m_yPos && m_fPendingRepaint)
        {
        UpdateWindow(ppg->m_hWnd);
        m_fPendingRepaint=FALSE;
        }

    pt.x-=m_ptPick.x;
    pt.y-=m_ptPick.y;

    m_ptLast=pt;
    m_fFeedback=TRUE;
    ppg->DrawDropTargetRect(&pt, &m_szl);

    return NOERROR;
    }






/*
 * CDropTarget::DragLeave
 *
 * Purpose:
 *  Informs the drop target that the operation has left its window.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  HRESULT         NOERROR
 */

STDMETHODIMP CDropTarget::DragLeave(void)
    {
    PCPages         ppg=m_pDoc->m_pPG;

    if (NULL==m_pIDataObject)
        return NOERROR;

    //Stop scrolling
    ppg->m_uHScrollCode=NOVALUE;
    ppg->m_uVScrollCode=NOVALUE;

    if (m_fPendingRepaint)
        UpdateWindow(ppg->m_hWnd);

    //Remove the last feedback rectangle.
    if (m_fFeedback)
        ppg->DrawDropTargetRect(&m_ptLast, &m_szl);

    m_fFeedback=FALSE;
    m_pIDataObject->Release();
    return NOERROR;
    }





/*
 * CDropTarget::Drop
 *
 * Purpose:
 *  Instructs the drop target to paste the data that was just now
 *  dropped on it.
 *
 * Parameters:
 *  pIDataSource    LPDATAOBJECT from which we'll paste.
 *  grfKeyState     DWORD providing current keyboard/mouse state.
 *  pt              POINTL at which the drop occurred.
 *  pdwEffect       LPDWORD in which to store what you did.
 *
 * Return Value:
 *  HRESULT         NOERROR
 */

STDMETHODIMP CDropTarget::Drop(LPDATAOBJECT pIDataSource
    , DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
    {
    PCPages         ppg=m_pDoc->m_pPG;
    BOOL            fRet=TRUE;
    FORMATETC       fe;
    TENANTTYPE      tType;
    PATRONOBJECT    po;
    POINT           ptS;

    *pdwEffect=DROPEFFECT_NONE;

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

    if (UDROP_NONE==ppg->UTestDroppablePoint(&pt))
        return ResultFromScode(E_FAIL);

    //Stop scrolling
    ppg->m_uHScrollCode=NOVALUE;
    ppg->m_uVScrollCode=NOVALUE;

    if (m_fPendingRepaint)
        UpdateWindow(ppg->m_hWnd);

    //2.  Remove the UI feedback
    if (m_fFeedback)
        ppg->DrawDropTargetRect(&m_ptLast, &m_szl);

    m_pIDataObject->Release();


    /*
     * Check if we can do the paste, and if so, tell our pasting
     * mechanism exactly where to place us.
     */
    pt.x-=m_ptPick.x;
    pt.y-=m_ptPick.y;

    POINTFROMPOINTL(ptS, pt);
    ScreenToClient(ppg->Window(), &ptS);
    POINTLFROMPOINT(po.ptl, ptS);

    //This is true if we didn't see placement data in DragEnter
    if (0!=m_fe.cfFormat)
        {
        po.szl.cx=m_szl.cx;         //We stored these positive
        po.szl.cy=-m_szl.cy;
        }
    else
        SETSIZEL(po.szl, 0, 0); //Ask object for its size.

    //Adjust for scrolling and mapping mode.
    ppg->AdjustPosition(&po.ptl, &po.szl);


    /*
     * If we're in the same document and moving, then we can just
     * stuff the Pages' m_ptDrop which will move us and return.
     */
    if (ppg->m_fDragSource && !(grfKeyState & MK_CONTROL))
        {
        *pdwEffect=DROPEFFECT_MOVE;
        ppg->m_fMoveInPage=TRUE;
        ppg->m_ptDrop=po.ptl;
        return NOERROR;
        }

    /*
     * Otherwise, paste either from another document or from
     * the same document which will always be a copy to the new
     * point.
     */

    *pdwEffect=DROPEFFECT_MOVE;

    if (grfKeyState & MK_CONTROL)
        {
        if (ppg->m_fLinkAllowed && (grfKeyState & MK_SHIFT))
            *pdwEffect=DROPEFFECT_LINK;
        else
            *pdwEffect=DROPEFFECT_COPY;
        }

    ppg->m_fMoveInPage=FALSE;

    /*
     * We know linking is desired if effect flag is set, so this
     * function will get the FORMATETC for linking.  Otherwise
     * FQueryPasteFromData will get the other FORMATETC to use.
     */
    if (DROPEFFECT_LINK==*pdwEffect)
        {
        fRet=m_pDoc->FQueryPasteLinkFromData(pIDataSource, &fe
            , &tType);
        }
    else
        fRet=m_pDoc->FQueryPasteFromData(pIDataSource, &fe, &tType);

    if (fRet)
        {
        //Copy the real format if we have placement data.
        po.fe=(m_pDoc->m_cf==fe.cfFormat) ? m_fe : fe;

        //Flag PasteFromData to use CFSTR_OBJECTDESCRIPTOR
        fRet=m_pDoc->PasteFromData(pIDataSource, &fe, tType
            , &po, 0, TRUE);
        }

    if (!fRet)
        return ResultFromScode(E_FAIL);


    *pdwEffect=DROPEFFECT_MOVE;

    if (grfKeyState & MK_CONTROL)
        *pdwEffect=DROPEFFECT_COPY;

    return NOERROR;
    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产69精品久久99不卡| 中文字幕一区二区三区视频 | 亚洲欧美日韩人成在线播放| 亚洲综合在线第一页| 免费黄网站欧美| 成人激情小说网站| 欧美日韩国产经典色站一区二区三区 | 欧美大肚乱孕交hd孕妇| 国产日韩欧美亚洲| 亚洲成人动漫av| 国产aⅴ精品一区二区三区色成熟| 91麻豆免费观看| 日韩欧美国产综合| 亚洲黄色片在线观看| 麻豆一区二区在线| 色综合久久久久综合体| 日韩精品一区二区三区在线观看| 亚洲天堂中文字幕| 另类成人小视频在线| 91久久精品日日躁夜夜躁欧美| 日韩欧美你懂的| 亚洲美女视频一区| 久久精品国产99久久6| 色哦色哦哦色天天综合| 精品国产伦理网| 亚洲一区二区三区中文字幕 | 中文字幕精品—区二区四季| 午夜精品久久久| 成人动漫av在线| 欧美一级片免费看| 亚洲精品国产精华液| 国产成人综合精品三级| 日韩一区二区在线观看视频| 亚洲免费在线观看| 国产v日产∨综合v精品视频| 91精品国产综合久久久久久漫画| 综合av第一页| 国产精品一区久久久久| 日韩欧美资源站| 亚洲国产婷婷综合在线精品| 成人91在线观看| 久久精品在这里| 久久狠狠亚洲综合| 欧美久久婷婷综合色| 亚洲一区在线视频| 91视频91自| 国产精品久久久久久久浪潮网站| 精品一区二区免费看| 91精品黄色片免费大全| 亚洲成av人片| 91福利视频久久久久| 成人免费在线观看入口| 粉嫩欧美一区二区三区高清影视| 日韩免费观看高清完整版| 亚洲va欧美va人人爽| 在线亚洲高清视频| 亚洲精品欧美在线| 色综合久久综合| 欧美经典三级视频一区二区三区| 国产乱色国产精品免费视频| 精品国产一区二区三区av性色 | 精品嫩草影院久久| 麻豆高清免费国产一区| 日韩欧美自拍偷拍| 九九九精品视频| 精品久久久久香蕉网| 久久不见久久见免费视频7| 欧美大白屁股肥臀xxxxxx| 日本不卡一区二区三区高清视频| 欧美麻豆精品久久久久久| 亚洲二区在线观看| 欧美日韩国产一区二区三区地区| 亚洲国产另类av| 777xxx欧美| 美女视频一区二区三区| 精品少妇一区二区三区在线播放 | 成人免费一区二区三区视频 | 亚洲一区二区不卡免费| 欧美日韩久久不卡| 日本不卡123| www久久精品| 国产成人av电影在线播放| 国产精品卡一卡二卡三| 色就色 综合激情| 日韩制服丝袜先锋影音| 日韩久久久精品| 国产成人av资源| 国产精品白丝在线| 在线免费观看一区| 天堂一区二区在线| 久久久久久9999| 91麻豆精品在线观看| 亚洲成人午夜影院| 制服丝袜中文字幕一区| 国产在线国偷精品免费看| 国产精品天天看| 在线免费观看日韩欧美| 轻轻草成人在线| 国产拍欧美日韩视频二区| 色综合色狠狠天天综合色| 亚洲大片免费看| 久久在线免费观看| 91在线国产观看| 日日摸夜夜添夜夜添国产精品 | 国产91丝袜在线18| 亚洲精品伦理在线| 日韩欧美国产精品一区| 成人看片黄a免费看在线| 亚洲国产精品久久人人爱蜜臀| 3751色影院一区二区三区| 粉嫩一区二区三区性色av| 亚洲午夜激情av| 久久精品人人做人人爽97| 91美女福利视频| 奇米777欧美一区二区| 国产精品每日更新在线播放网址| 欧美性生活一区| 国产精品一区2区| 亚洲午夜影视影院在线观看| 久久久久久久久99精品| 欧美日韩在线一区二区| 国产成人亚洲综合色影视| 亚洲日本丝袜连裤袜办公室| 日韩一级精品视频在线观看| 97久久久精品综合88久久| 理论电影国产精品| 一区二区免费视频| 久久综合久久综合久久综合| 在线国产电影不卡| 国产不卡免费视频| 日韩av电影一区| 亚洲人成网站精品片在线观看| 精品对白一区国产伦| 欧美影院一区二区三区| 国产99精品视频| 日本网站在线观看一区二区三区 | www.欧美日韩| 九一久久久久久| 亚洲国产aⅴ天堂久久| 国产精品妹子av| 精品久久久久久无| 欧美高清视频不卡网| 99久久er热在这里只有精品15| 久久国产精品色| 图片区小说区国产精品视频| √…a在线天堂一区| 国产日韩精品一区| 日韩精品中文字幕在线一区| 欧美亚洲高清一区| 91女厕偷拍女厕偷拍高清| 国产乱子伦视频一区二区三区 | 国产精品免费av| 久久综合九色综合97婷婷| 91精品国产91久久久久久一区二区 | 在线播放91灌醉迷j高跟美女 | 怡红院av一区二区三区| 国产欧美日韩在线视频| 精品国产一区二区三区久久影院 | 美女高潮久久久| 五月天婷婷综合| 亚洲精品免费在线播放| 亚洲国产成人在线| 久久精品水蜜桃av综合天堂| 欧美一级片在线看| 欧美一区中文字幕| 欧美美女视频在线观看| 在线观看一区二区视频| 色老汉一区二区三区| 亚洲福利视频一区| 一本大道av伊人久久综合| 久久色中文字幕| 成人性视频免费网站| 精品国内片67194| 精品一区二区三区免费观看| 欧美videos大乳护士334| 日韩黄色小视频| 91精品视频网| 免费久久99精品国产| 日韩三级视频在线观看| 老鸭窝一区二区久久精品| 精品国产一区二区三区忘忧草 | 亚洲久本草在线中文字幕| 精品国产免费人成电影在线观看四季| 欧美疯狂做受xxxx富婆| 69久久99精品久久久久婷婷| 欧美日韩国产首页| 欧美精品18+| 欧美电影精品一区二区| 精品国产91亚洲一区二区三区婷婷| 欧美成人高清电影在线| 久久亚洲私人国产精品va媚药| 日韩欧美一区二区三区在线| 26uuuu精品一区二区| 日本一区二区三区久久久久久久久不| 久久精品欧美日韩| 亚洲丝袜另类动漫二区| 亚洲国产成人av网| 毛片不卡一区二区| 国产高清在线观看免费不卡| 99精品热视频|