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

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

?? ondragenter(),ondragmove(),ondrop().txt

?? DragQueryPoint( hDropInfo,&pt ) CString strPos strPos.Format("拖放的位置:(%d %d)",pt.x,pt.y) Set
?? TXT
字號:
本例的窗口對象是從CView派生的,CView類實現了OnDragEnter(),OnDragMove(),OnDrop()等成員函數,實現拖拽操作在派生類中重載這些函數就可以了。但是對于一般的窗口CWnd是沒有這些虛成員函數的。一個更加一般的做法是從COleDropTarget派生一個類,重載COleDropTarget的成員函數OnDragEnter(),OnDragMove(),OnDrop(),然后在窗口類中定義一個COleDropTarget派生類的對象,并把窗口注冊給這個對象就可以實現同樣的拖拽效果了。

      剪貼板技術是由WINDOWS操作系統提供的用于進程內或進程間通信的一種機制。不光是拷貝粘貼操作需要用到剪貼板,拖拽也離不開它,并且他們將數據放到剪貼板上的一些代碼也極其相似。本例將展示給大家怎樣使用剪貼板。

      剪貼板特點是:協議簡單,數據傳輸由用戶驅動。在很多不是由用戶驅動但要做很多數據通信的應用程序可以采用其他的進程間通信的方法。進程間通信詳細信息請您參見MSDN中Platform SDK的Interprocess Communication中的相應文檔。

      WINDOWS系統缺省支持的8種剪貼板格式:
      CF_BITMAP CF_DIB
      CF_DIB
      CF_ENHMETAFILE
      CF_METAFILEPICT
      CF_OEMTEXT
      CF_TEXT
      CF_UNICODETEXT

//將數據放到剪貼板上,一般要5個步驟,如下所示:
void CClipExamView::OnEditCopy() 
{
      // 1 創建一個新的COleDataSource對象
      COleDataSource*  pSource = new COleDataSource(); 

      // 2 創建一個新的CSharedFile對象
      CSharedFile      sf(GMEM_MOVEABLE|GMEM_DDESHARE|GMEM_ZEROINIT);
      CString      text = _T("Testing 1... 2... 3...");

      // 3 將信息寫到CSharedFile對象中
      sf.Write(text, text.GetLength()); 

      HGLOBAL hMem = sf.Detach();
      if (!hMem) return;

      // 4 將CSharedFile中的數據內存傳遞到CacheGlobalData()中
      pSource->CacheGlobalData(CF_TEXT, hMem);

      // 5 用SetClipboard()將數據放置到剪貼板上
      pSource->SetClipboard();
}

//除了采用上面的方法,還可以采用序列化的方式將數據寫到剪貼板上。
//采用序列化的方式將數據寫到剪貼板是很有用的,這樣可以給自己的應用程序定義一個自定義的剪貼板。
//這可以通過注冊一個自定義的剪貼板格式來實現,并且將數據序列化到CSharedFile對象中
//下面舉例說明如何將一個CObject對象序列化到剪貼板中
void SerializeToClipboard(CObject* obj,CString FormatName)
{
      COleDataSource* pSource = new COleDataSource(); 
      CSharedFile sf(GMEM_MOVEABLE|GMEM_DDESHARE|GMEM_ZEROINIT);
      UINT format=RegisterClipboardFormat(FormatName);
      CArchive ar(&sf,CArchive::store);
      obj->Serialize(ar);
      ar.Close();
      HGLOBAL hMem = sf.Detach();
      if (!hMem) return;
      pSource->CacheGlobalData(format, hMem);
      pSource->SetClipboard();
}

//從剪貼板上讀取數據,正好與OnEditCopy相反,也是5個步驟
void CClipExamView::OnEditPaste() 
{   
      // 1 創建一個新的COleDataObject對象
      COleDataObject obj;

      // 2 檢查剪貼板中數據格式是否滿足需要
      if (obj.AttachClipboard()) 
      {
            if (obj.IsDataAvailable(CF_TEXT)) 
            {
                  HGLOBAL hmem = obj.GetGlobalData(CF_TEXT);
                  CMemFile sf((BYTE*) ::GlobalLock(hmem), ::GlobalSize(hmem));
                  CString buffer;
            
                  // 3 將剪貼板中的數據放到CMemFile對象中
                  //當然你可以用其他的內存對象或者自定義的數據類型或對象
                  LPSTR str = buffer.GetBufferSetLength(::GlobalSize(hmem));

                  // 4 從CMemFile對象中讀出數據
                  sf.Read(str, ::GlobalSize(hmem));
                  ::GlobalUnlock(hmem);

                  // 5 用數據做相關操作
                  TRACE("Paste received = '%s'\r\n", buffer);
            }
      }
}

//同樣你可以采用序列化的方式將數據從剪貼板中取出
void SerializeFromClipboard(COleDataObject* obj,CObject* cobj,CString FormatName)
{
      //根據剪貼板格式的名稱取得該格式的唯一標識
      //詳細信息參考API函數:RegisterClipboardFormat
      UINT format=RegisterClipboardFormat(FormatName);
      //判斷剪貼板數據格式
      if(obj->IsDataAvailable(format))
      {
            //讀取剪貼板中的數據
            HGLOBAL hmem=obj->GetGlobalData(format);
            //創建內存文件
            CMemFile sf((BYTE*)::GlobalLock(hmem),::GlobalSize(hmem));
            //序列化操作
            CArchive ar(sf,CArchive::Load);
            cobj->Serialize(ar);
            //后續清理
            ar.Close();
            ::GlobalUnlock(hmem);
      }
}
//只要對上面的代碼做少量的改動就可以實現拖拽支持。


//當一個被拖拽的對象進入一個窗口的時候,由該窗口決定是否接受該對象
//在一個拖拽操作過程中,當鼠標在一個窗口上移動的時候OnDragOver被調用
//第一個參數pDataObject表示被拖動的數據對象
//第二個參數dwKeyState表示鍵盤的狀態
//第三個參數point表示當前的鼠標的位置
//返回值用于描述是否接受拖拽,DROPEFFECT_NONE表示不接受,否則接受
DROPEFFECT CClipExamView::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point) 
{
      if (pDataObject->IsDataAvailable(CF_TEXT)) 
            return DROPEFFECT_COPY;      //接受拖拽
      else
            return DROPEFFECT_NONE;      //不接受拖拽
}


//當用戶釋放鼠標時,就可以來實現真正的數據接受了
//第一個參數pDataObject表示被拖動的數據對象
//第二個參數dropEffect表示操作類型
//第三個參數point表示當前的鼠標的位置
BOOL CClipExamView::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point) 
{
      //判斷剪貼板格式是否滿足要求
      if (pDataObject->IsDataAvailable(CF_TEXT)) 
      {
            //從數據對象中取出數據
            HGLOBAL hmem = pDataObject->GetGlobalData(CF_TEXT);
            CMemFile sf((BYTE*) ::GlobalLock(hmem), ::GlobalSize(hmem));
            CString buffer;       
            LPSTR str = buffer.GetBufferSetLength(::GlobalSize(hmem));
            sf.Read(str, ::GlobalSize(hmem));
            ::GlobalUnlock(hmem);

            //用'buffer'中的數據做相應的處理工作
            TRACE("OnDrop received = '%s'\r\n", buffer);
            return TRUE;
      }
      return FALSE;
}

//給拖拽操作設置數據源,并且啟動拖拽操作
void CClipExamView::OnLButtonDown(UINT nFlags, CPoint point) 
{
      //創建一個COleDataSource,可以認為它就是一個存放將被拖放的數據對象
      COleDataSource*      pSource = new COleDataSource();
      //創建一個CSharedFile對象
      CSharedFile sf(GMEM_MOVEABLE|GMEM_DDESHARE|GMEM_ZEROINIT);
      CString      text = _T("Testing 1... 2... 3...");
      //將數據寫入CSharedFile對象
      sf.Write(text, text.GetLength()); 
      //取得數據對象的內存句柄,并將數據放入剪貼板
      HGLOBAL hMem = sf.Detach();
      if (!hMem) return;
      //CacheGlobalData()的第一個參數描述放入剪貼板的數據的格式
      //第2個參數描述放入剪貼板的數據的全局內存句柄
      pSource->CacheGlobalData(CF_TEXT, hMem);
      //啟動拖拽操作,函數DoDragDrop到拖拽操作完成才返回
      //從交互上看,就是等到用戶釋放鼠標左鍵才結束操作
      pSource->DoDragDrop();
      //在此可以做一些清理工作,因為在這里拖拽操作已經完成,
      //沒有用的內存可以釋放了
}

//使一個View成為一個Drop Target
void CClipExamView::OnInitialUpdate() 
{
      CView::OnInitialUpdate();
      //將窗口本身注冊給一個COleDropTarget對象,一定要注意這是必不可少的
      //如果你不這樣做,那么視圖窗口將不會接受拖拽操作中的對象
      //也就是說這個窗口不會成為拖拽中的對象的目標窗口(Drop Target)
      m_DropTarget.Register(this);  
      //m_DropTarget在clipexamView.h中已經聲明為COleDropTarget m_DropTarget;
}

最后值得注意兩點:

1 要確保在應用類的InitInstance()中調用AfxOleInit()
在應用程序的入口處(一般是在應用類的InitInstance()成員函數中)調用AfxOleInit()
這是用來初始化OLE庫的
if (!AfxOleInit())
{
      AfxMessageBox(IDP_OLE_INIT_FAILED);
      return FALSE;
}

2 確保stdafx.h中有相關包含語句,具體請您參考工程

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人影院| 久久国产精品色婷婷| 亚洲一二三四久久| 精品亚洲成a人| 91九色最新地址| 久久久www免费人成精品| 亚洲国产日韩一级| 成人在线视频首页| 日韩女优视频免费观看| 一区二区三区四区激情| 国产成人免费在线观看不卡| 欧美一区二区在线播放| 亚洲私人黄色宅男| 高清不卡一二三区| 精品久久久久久久久久久久包黑料| 一区二区三区在线高清| 成人黄色电影在线| 欧美极品少妇xxxxⅹ高跟鞋| 美腿丝袜亚洲一区| 欧美精选午夜久久久乱码6080| 最新热久久免费视频| 高清beeg欧美| 欧美国产精品v| 国产成人精品aa毛片| 精品伦理精品一区| 青青青伊人色综合久久| 欧美日韩一区二区三区在线看| 亚洲色图在线视频| 成人av网址在线| 国产精品欧美一区喷水| 国产精品资源站在线| 精品国产乱子伦一区| 久久精品国产精品青草| 欧美一区二区三区啪啪| 视频一区视频二区中文| 欧美日韩不卡一区二区| 亚洲123区在线观看| 欧美日韩亚洲不卡| 天天综合日日夜夜精品| 欧美一区二区播放| 麻豆极品一区二区三区| 欧美精品一区二区久久久| 国内精品伊人久久久久av一坑| 精品粉嫩aⅴ一区二区三区四区| 裸体一区二区三区| ww久久中文字幕| 国产激情视频一区二区三区欧美| 国产欧美精品一区二区色综合| 国产精品1024| 亚洲天堂成人网| 欧美日韩精品三区| 精品一区中文字幕| 国产精品无人区| 在线视频欧美区| 日韩av中文在线观看| 26uuu精品一区二区| 成人黄色片在线观看| 亚洲综合色丁香婷婷六月图片| 欧美蜜桃一区二区三区| 紧缚奴在线一区二区三区| 久久精品一区二区三区四区| 91偷拍与自偷拍精品| 香蕉加勒比综合久久| 精品成人私密视频| 99精品偷自拍| 免费欧美日韩国产三级电影| 欧美国产在线观看| 欧美性极品少妇| 国产美女av一区二区三区| 亚洲女人的天堂| 日韩精品自拍偷拍| 97精品久久久久中文字幕| 日本 国产 欧美色综合| 国产婷婷一区二区| 欧美三级在线看| 国产91丝袜在线播放九色| 亚洲一区二区三区国产| 久久人人超碰精品| 日本高清免费不卡视频| 韩国女主播成人在线| 亚洲精品一二三| www久久精品| 欧美三区在线观看| 97se亚洲国产综合在线| 精品影视av免费| 亚洲h在线观看| 日韩一区中文字幕| 久久亚洲精华国产精华液| 欧美日韩国产天堂| 99久久er热在这里只有精品15| 狠狠色2019综合网| 丝袜亚洲另类丝袜在线| 亚洲精品中文在线影院| 亚洲国产精品ⅴa在线观看| 欧美一级淫片007| 在线免费观看日本欧美| 成人h版在线观看| 国产乱国产乱300精品| 蜜桃精品在线观看| 午夜久久久久久久久| 一区二区在线免费| 国产精品久线在线观看| 国产日韩欧美精品一区| 精品日韩一区二区三区| 51精品视频一区二区三区| 欧美视频精品在线| 在线看国产一区二区| 成人激情免费视频| 国产99精品在线观看| 国产精品88888| 国产高清在线精品| 国产一区激情在线| 精品系列免费在线观看| 理论电影国产精品| 久久99精品视频| 经典三级一区二区| 久久99精品久久久久久国产越南 | 国产一区二区美女| 老司机免费视频一区二区三区| 日韩高清中文字幕一区| 男人操女人的视频在线观看欧美 | 91免费国产视频网站| 成人精品视频网站| 99视频精品在线| 99re热这里只有精品免费视频| eeuss鲁片一区二区三区 | 久久久久久久精| 欧美精品一区二| 欧美激情一区二区在线| 中文字幕一区二区在线播放| 国产精品久久久久久久久免费丝袜| 国产精品免费看片| 最新欧美精品一区二区三区| 亚洲一二三区视频在线观看| 首页国产欧美日韩丝袜| 国产精品一线二线三线| www.在线欧美| 欧美日韩在线观看一区二区| 日韩欧美在线一区二区三区| 欧美精品一区二区三区在线| 中文文精品字幕一区二区| 亚洲欧洲性图库| 亚洲国产精品人人做人人爽| 午夜精品123| 国产一区二区三区精品视频| 成人av影视在线观看| 欧美日韩午夜精品| 亚洲精品一区二区三区99| 亚洲色图制服诱惑 | 久久精品亚洲乱码伦伦中文| 中文字幕中文字幕中文字幕亚洲无线| 亚洲精品第1页| 久久99精品视频| 色综合视频在线观看| 欧美一级日韩免费不卡| 国产精品入口麻豆原神| 午夜日韩在线电影| 国产精品一区二区无线| 91福利视频网站| 久久久精品黄色| 亚洲福中文字幕伊人影院| 国产精品一区二区在线播放| 在线看日本不卡| 国产欧美综合在线观看第十页| 亚洲国产成人av| 成人污污视频在线观看| 欧美一区欧美二区| 尤物在线观看一区| 国产精品中文字幕日韩精品| 欧美色成人综合| 亚洲四区在线观看| 国产在线视视频有精品| 欧美精品久久99| 一区二区三区在线视频免费观看| 国产美女久久久久| 91精品国产综合久久香蕉的特点| 亚洲欧美另类在线| 国产成a人无v码亚洲福利| 91精品福利在线一区二区三区| 亚洲免费av在线| 国产盗摄视频一区二区三区| 日韩欧美亚洲一区二区| 亚洲 欧美综合在线网络| 91麻豆国产福利精品| 欧美精彩视频一区二区三区| 免费看黄色91| 91精品国产色综合久久不卡电影| 亚洲精品国产a久久久久久| a亚洲天堂av| 日本一区二区在线不卡| 国产米奇在线777精品观看| 欧美变态凌虐bdsm| 麻豆精品视频在线观看免费 | 不卡一二三区首页| 久久亚洲精品小早川怜子| 精品亚洲成av人在线观看| 欧美一区二区日韩| 免费在线视频一区| 欧美一级生活片| 精品一二三四在线|