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

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

?? droptgt.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
字號:
/*
 * DROPTGT.CPP
 * Patron Chapter 13
 *
 * 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 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)
            *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;
        }


    //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)
            *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.
     */

    ppg->m_fMoveInPage=FALSE;
    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;

        fRet=m_pDoc->PasteFromData(pIDataSource, &fe, tType
            , &po, 0);
        }

    if (!fRet)
        return ResultFromScode(E_FAIL);


    *pdwEffect=DROPEFFECT_MOVE;

    if (grfKeyState & MK_CONTROL)
        *pdwEffect=DROPEFFECT_COPY;

    return NOERROR;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩亚洲综合在线 欧美亚洲特黄一级| 美女脱光内衣内裤视频久久影院| 日韩女优制服丝袜电影| 91高清在线观看| 日本韩国一区二区三区视频| 成人av在线网站| 国产aⅴ精品一区二区三区色成熟| 国产一区二区三区久久悠悠色av| 国产呦萝稀缺另类资源| 国产精品一品二品| 国产成人8x视频一区二区| 国产精品一线二线三线精华| 国产aⅴ综合色| 91免费国产视频网站| 在线观看精品一区| 欧美一级国产精品| 久久天天做天天爱综合色| 国产亚洲成年网址在线观看| 久久久久国产一区二区三区四区| 久久精品一区二区三区av| 亚洲精品一区二区三区99| 欧美成人精品1314www| 久久婷婷一区二区三区| 亚洲精品视频在线看| 亚洲va天堂va国产va久| 久久超碰97人人做人人爱| 成人激情图片网| 欧洲视频一区二区| 精品久久久三级丝袜| 亚洲欧美影音先锋| 青草av.久久免费一区| 国产91在线看| 在线成人小视频| 日本一区二区三区四区| 亚洲午夜精品久久久久久久久| 久久99热狠狠色一区二区| 本田岬高潮一区二区三区| 欧美日韩三级视频| 国产精品视频yy9299一区| 亚洲一区二区3| 精品一区二区三区在线播放 | 久久久久国产精品麻豆ai换脸 | 亚洲综合在线电影| 精品一区二区三区免费| 91精品福利在线| 久久久久久免费| 婷婷激情综合网| jvid福利写真一区二区三区| 欧美福利一区二区| 夜夜夜精品看看| 成人精品免费视频| 精品国精品国产尤物美女| 亚洲精品中文在线| 99久久久无码国产精品| 精品福利视频一区二区三区| 亚洲图片欧美一区| 91亚洲精品一区二区乱码| 精品入口麻豆88视频| 亚洲综合激情另类小说区| 成人爽a毛片一区二区免费| 日韩三级在线免费观看| 日韩激情中文字幕| 欧洲av一区二区嗯嗯嗯啊| 中文字幕一区二区三区精华液| 精品午夜一区二区三区在线观看| 欧美日本免费一区二区三区| 91精品国产美女浴室洗澡无遮挡| 亚洲欧美日韩电影| 99国产精品视频免费观看| 国产精品丝袜久久久久久app| 国产伦精品一区二区三区视频青涩 | 亚洲精选视频免费看| 福利一区在线观看| 国产精品色哟哟网站| 国产大片一区二区| 国产日产精品1区| 国产二区国产一区在线观看| 欧美激情一区二区三区四区| 成人免费视频视频| 亚洲欧洲成人精品av97| 色综合中文字幕| 亚洲精品国产第一综合99久久| 91无套直看片红桃| 一区二区激情小说| 欧美电影在线免费观看| 蜜臀av一区二区在线观看| 日韩欧美精品在线视频| 国内精品久久久久影院色| 久久美女艺术照精彩视频福利播放| 国产精品一区二区在线观看不卡| 国产精品视频九色porn| 色中色一区二区| 天天综合色天天综合| 精品国精品国产尤物美女| 成人网页在线观看| 一区二区欧美在线观看| 欧美精品久久久久久久多人混战| 日韩精品高清不卡| 欧美精品一区二区三区蜜桃视频| 成人丝袜高跟foot| 婷婷综合久久一区二区三区| 日韩一区二区三区四区| 国产高清无密码一区二区三区| 亚洲欧美日韩中文播放| 777xxx欧美| 成人综合激情网| 亚洲国产wwwccc36天堂| 久久久天堂av| 欧美亚洲国产一卡| 国产美女av一区二区三区| 亚洲欧美激情小说另类| 欧美精品777| 风间由美性色一区二区三区| 亚洲成人你懂的| 国产欧美日韩中文久久| 欧美日韩一区二区三区视频| 国产成人综合自拍| 五月综合激情网| 中文字幕亚洲一区二区av在线| 欧美日韩一区高清| 成人午夜在线视频| 奇米综合一区二区三区精品视频| 中文字幕亚洲综合久久菠萝蜜| 欧美一区二区精品| 欧洲一区在线电影| 国产91精品露脸国语对白| 日产国产高清一区二区三区| 亚洲日本丝袜连裤袜办公室| 精品粉嫩超白一线天av| 欧美放荡的少妇| 色久综合一二码| 成人av一区二区三区| 精品在线一区二区三区| 亚洲免费观看高清完整版在线观看熊 | 成人精品高清在线| 久久精品999| 日欧美一区二区| 亚洲成人一区在线| 亚洲精品综合在线| 亚洲丝袜制服诱惑| 国产精品丝袜久久久久久app| 日韩一级在线观看| 欧美丰满少妇xxxxx高潮对白| 色菇凉天天综合网| 91网站最新地址| av不卡在线观看| av不卡在线播放| 色综合久久99| 色哟哟一区二区在线观看| 99久久综合99久久综合网站| 国产成人aaa| 99热国产精品| 91首页免费视频| 日本道在线观看一区二区| 96av麻豆蜜桃一区二区| 一本到三区不卡视频| 日本黄色一区二区| 欧美区在线观看| 91精品国产手机| 日韩一级免费一区| 精品国产麻豆免费人成网站| 精品国产髙清在线看国产毛片| 91精品国模一区二区三区| 91精品国产综合久久精品| 欧美日韩黄色影视| 91精品国产综合久久香蕉麻豆| 制服视频三区第一页精品| 日韩一区二区三区高清免费看看| 日韩一区二区三区免费看 | 一本大道av一区二区在线播放| 色网站国产精品| 欧美日韩美少妇| 日韩免费看网站| 国产精品人妖ts系列视频| 亚洲精品日韩综合观看成人91| 亚洲国产裸拍裸体视频在线观看乱了 | 久久精品人人做| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲一区二区在线播放相泽| 天堂资源在线中文精品| 青青草97国产精品免费观看无弹窗版| 天天综合色天天| 高清不卡在线观看| 555www色欧美视频| 国产欧美日产一区| 亚洲丶国产丶欧美一区二区三区| 日本va欧美va欧美va精品| 高清不卡一区二区| 欧美一区二区三区免费大片 | 亚洲精品中文在线影院| 天使萌一区二区三区免费观看| 国产一区二区福利| 在线观看免费成人| 国产欧美一区二区精品性| 亚洲午夜免费福利视频| 国产精品99久久久久| 不卡一卡二卡三乱码免费网站| 欧美性videosxxxxx| 日本一区二区免费在线| 五月天丁香久久|