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

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

?? window下拖放操作drag & drop 全解析.txt

?? DragQueryPoint( hDropInfo,&pt ) CString strPos strPos.Format("拖放的位置:(%d %d)",pt.x,pt.y) Set
?? TXT
字號:
Window下拖放操作Drag & Drop 全解析 
 
作者:未知    文章來源:Internet    點擊數:5961    更新時間:2005-5-31 
 

一、基本概念

拖放,是指用鼠標拖動的方法,在不同程序的窗口之間、同一個程序的不同窗口之間或同一程序同一窗口的不同控件之間,進行移動、復制和粘貼等操作的技術。拖放操作是在操作系統的幫助下完成的。被拖動的對象首先向操作系統注冊它使用的數據格式,并按指定的數據格式提供數據,拖放操作結束時,接收拖放的窗口按指定的數據格式提取有關數據,并根據提取的數據生成相應的對象。

二、兩種拖放方式

拖放有兩種類型:OLE拖放和文件管理器拖放。這兩種方式是完全不同的機制。文件管理器拖放只能處理文件名,通過映射目的窗口的WM_DROPFILES消息,窗口就可以收到拖放進來的文件名。OLE拖放則更加通用一些,它允許你拖放可同時被保存在剪貼板上的任何數據。本文首先介紹文件管理器拖放,然后再介紹OLE拖放,最后給出一個用OLE實現的,支持文件拖放操作的增強列表控件CListCtrlEx。

三、文件管理器拖放原理及實例

這種方式的實質就是產生一個消息WM_DROPFILES。技術上沒有什么難點,主要用到下面幾個API函數:DragQueryFile、DragQueryPoint、DragFinish。它們的原型和注解分別如下:

UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch)

本函數用來取得拖放的文件名。其中,hDrop是一個指向含有被拖放的文件名的結構體的句柄;iFiles是要查詢的文件序號,因為一次可能同時拖動很多個文件;lpszFiles是出口緩沖區指針,保存iFiles指定序號的文件的路徑名,cch指定該緩沖區的大小。有兩點值得注意,第一,如果我們在調用該函數的時候,指定iFile為0xFFFFFFFF,則DragQueryFile將忽略lpszFile和cch參數,返回本次拖放操作的文件數目;第二,如果指定lpszFile為NULL,則函數將返回實際所需的緩沖區長度。

BOOL DragQueryPoint(HDROP hDrop, LPPOINT lppt);

本函數用來獲取,當拖放操作正在進行時,鼠標指針的位置。第二個參數lppt是一個指向POINT結構體的指針,用來保存文件放下時,鼠標指針的位置。窗口可以調用該函數以查詢文件是否落在自己的窗口矩形中。

void DragFinish(HDROP hDrop);

當拖放操作處理完畢后需調用該函數釋放系統分配來傳輸文件名的內存。

首先,建立一個對話框工程,確保選中對話框的Accept Files屬性。如果不選,也可以在窗口創建的時候(譬如OnCreate函數中)調用DragAcceptFiles(TRUE),效果是一樣的。

然后映射WM_DROPFILES消息。該消息處理函數原型如下:void OnDropFiles(HDROP hDrop),注意入口參數為HDROP型,它是一個結構體指針,所指向的結構體中包含了被拖放的文件的名稱。接下來我們主要要完成兩個動作:第一,通過調用DragQueryFile并指定其iFile參數為0xFFFFFFFF,得到本次拖放操作的文件數目;第二步,用一個循環依次取出各個文件名。示例如下:

void CListCtrlEx::OnDropFiles(HDROP hDrop)

{

        char   szFilePathName[_MAX_PATH+1] = {0};

UINT  nNumOfFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); //得到文件個數

        for (UINT nIndex=0 ; nIndex< nFileCount; ++nIndex)

        {

            DragQueryFile(hDrop, nIndex, szFilePathName, _MAX_PATH);  //得到文件名

        }

        DragFinish(hDrop);

}

四、OLE拖放原理

MFC為實現對象拖放提供了如下類:COleDataSource、COleDataObject、COleDropTarget、COleDropSource。下面分別介紹它們,然后通過一個實例講述實現的具體步驟。

·  COleDataSource

啟動一次拖放操作,保存拖放的數據,并向系統提供拖放對象的數據。類中重要的成員函數根據用途分為如下三種:

1. 用于設定提供數據的方式和使用的數據格式。

提供數據的方式有兩種,一種是即時方式,另一種是延遲方式。延遲方式不需要立即提供數據,當需要提供數據時,系統將調用對應的函數來獲得數據,一般都是重載OnRenderData函數或其他虛函數,以響應數據請求。數據格式可以是CF_TEXT等常用的剪貼板格式,也可以是自己利用函數RegisterClipboardFormat函數注冊的特定格式。

CacheData:提供指定格式的數據,格式由結構STGMEDIUM指定,即時方式;

CacheGlobalData:利用全局句柄HGLOBAL,為指定格式提供數據,即時方式,適用小數據量;

DelayRenderData:使用延遲方式按指定格式提供數據,當系統需要數據時,會調用函數OnRenderGlobalData/OnRenderData來取得數據;

DelayRenderFileData:使用延遲方式利用CFile為指定格式提供數據,當需要數據時,會調用函數OnRenderFileData來取得數據;

2. 響應請求,提供數據

OnRenderFileData:為延遲方式提供CFile型數據。

OnRenderGlobalData:為延遲方式提供HGLOBAL數據。

OnRenerData:為延遲方式提供各種所支持的類型的數據。

3. 實施拖放操作

DoDragDrop:開始實施拖放操作

 

·  COleDataObject

用于代表拖放的數據,它是作為COleDataSource類的成員,類中主要成員函數有:

BeginEnumFormat:為枚舉數據格式作準備;

GetNextFormat:返回下一個數據格式;

IsDataAvailable: 檢查指定的數據格式是否可用;

GetData:按指定數據格式,獲得數據;

GetFileData:按指定數據格式,獲得CFile型數據;

GetGlobalData:按指定數據格式,獲得HGLOBAL型數據;

 

·  COleDropTarget

用于在窗口和OLE庫之間提供通訊機制。任何一個窗口,要想能夠接收拖放,必須包含一個COleDropTarget對象,并注冊之。其中的成員函數可分為兩大類:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
88在线观看91蜜桃国自产| 9人人澡人人爽人人精品| 中文在线一区二区| 久久久久久综合| 国产亚洲va综合人人澡精品 | 日本高清不卡在线观看| youjizz久久| 99久久国产综合精品色伊| bt欧美亚洲午夜电影天堂| 成人一区二区三区视频| 不卡电影一区二区三区| 91理论电影在线观看| 色欲综合视频天天天| 欧美日韩专区在线| 欧美一区二区性放荡片| 精品国产乱码久久久久久老虎| 精品福利一区二区三区免费视频| 欧美精品一区二区高清在线观看| 久久综合九色综合久久久精品综合| 精品国产欧美一区二区| 国产精品系列在线| 亚洲欧美激情一区二区| 日韩精品一二区| 韩国精品在线观看| 91视频免费播放| 欧美二区乱c少妇| 国产亚洲精品福利| 一区二区三区精品在线观看| 午夜伊人狠狠久久| 国产成人亚洲综合a∨婷婷| 91丨九色丨尤物| 7777精品伊人久久久大香线蕉经典版下载 | 日韩欧美高清在线| 国产欧美日韩三级| 天天综合色天天| 国产激情偷乱视频一区二区三区| 91蜜桃传媒精品久久久一区二区| 日韩一区二区在线观看| 日韩一区欧美一区| 91久久精品国产91性色tv| 这里是久久伊人| 亚洲日本一区二区| 国产一区二区三区高清播放| 精品视频1区2区| 国产精品久久久久久久蜜臀| 日本不卡一二三区黄网| 色婷婷综合久久| 久久久亚洲高清| 日韩av电影天堂| 在线免费观看日韩欧美| 欧美国产日产图区| 精品一区二区三区日韩| 欧美视频一区在线| 亚洲日本在线看| 成人97人人超碰人人99| 久久久久久久网| 久久99精品网久久| 欧美日韩国产高清一区二区三区 | 成人污污视频在线观看| 91精品国产福利| 亚洲国产综合视频在线观看| 99久久综合色| 国产精品理论在线观看| 国产精品夜夜嗨| 欧美va在线播放| 91社区在线播放| 久久午夜色播影院免费高清| 日日夜夜精品视频天天综合网| 色呦呦网站一区| 亚洲人亚洲人成电影网站色| 懂色av一区二区三区免费看| 精品对白一区国产伦| 日本网站在线观看一区二区三区 | 免费成人av资源网| 欧美一级高清片在线观看| 亚洲成国产人片在线观看| 日本韩国欧美一区二区三区| 亚洲乱码一区二区三区在线观看| 不卡的av网站| 亚洲精品乱码久久久久久久久| 91视频在线看| 亚洲一区二区三区精品在线| 欧美视频在线观看一区二区| 亚洲国产精品久久人人爱蜜臀| 欧美在线小视频| 天堂久久一区二区三区| 日韩欧美一级二级三级| 国产一区二区主播在线| 国产女同性恋一区二区| 色综合色狠狠天天综合色| 一区二区三区在线高清| 欧美久久久久久久久中文字幕| 美女视频免费一区| 国产香蕉久久精品综合网| 99riav一区二区三区| 午夜精品福利视频网站| 欧美tk—视频vk| 99国产精品99久久久久久| 高清国产一区二区| 亚洲男人都懂的| 日韩午夜激情av| youjizz国产精品| 天天综合日日夜夜精品| 久久久精品天堂| 色屁屁一区二区| 精品写真视频在线观看| 综合欧美亚洲日本| 日韩精品一区二区三区在线播放| 国产成人aaa| 午夜精品久久久久久不卡8050| 欧美精品一区二区三区久久久| 懂色av一区二区三区免费看| 午夜在线成人av| 亚洲欧美综合色| 欧美mv日韩mv亚洲| 日本韩国欧美国产| 国产成人av资源| 日日夜夜精品视频免费| 亚洲欧洲精品一区二区三区| 欧美一区二区三区视频免费| 播五月开心婷婷综合| 精品在线观看免费| 亚洲大尺度视频在线观看| 国产女同互慰高潮91漫画| 6080yy午夜一二三区久久| 99这里只有久久精品视频| 九九国产精品视频| 日韩国产精品久久久久久亚洲| 国产精品少妇自拍| 精品国产露脸精彩对白| 欧美精品高清视频| 欧美最猛性xxxxx直播| 国产福利一区在线| 久久福利视频一区二区| 成人天堂资源www在线| 热久久久久久久| 亚洲福利电影网| 一区二区日韩av| 中文字幕一区不卡| 国产精品美女久久福利网站 | 国产精品一区二区在线播放| 午夜国产精品影院在线观看| 一区二区在线免费观看| 一区精品在线播放| 综合久久久久久| 国产精品灌醉下药二区| 中文字幕乱码一区二区免费| 欧美大片一区二区| 精品国产一区二区三区忘忧草 | 亚洲一区二区三区四区在线| 成人欧美一区二区三区黑人麻豆| 国产日产欧美一区| 国产日韩欧美一区二区三区综合| www国产成人免费观看视频 深夜成人网| 欧美精品1区2区3区| 欧美精品一二三四| 欧美精品一二三区| 日韩精品一区二区三区视频| 精品久久久久久久久久久久包黑料 | 中文字幕一区二区三区不卡| 国产精品视频麻豆| 自拍偷拍国产精品| 亚洲综合色网站| 日韩在线观看一区二区| 蜜芽一区二区三区| 国产成人亚洲综合色影视| 不卡在线视频中文字幕| 欧美精品一区视频| 国产精品欧美久久久久一区二区| 国产精品毛片久久久久久| 亚洲男同1069视频| 日本一不卡视频| 国产精品一级片在线观看| caoporn国产精品| 欧美日韩国产经典色站一区二区三区| 宅男在线国产精品| 亚洲国产高清不卡| 亚洲一区在线观看免费观看电影高清| 亚洲国产一区二区视频| 精品一区二区三区在线播放| 成人激情电影免费在线观看| 欧美四级电影在线观看| 日韩午夜精品电影| 中文字幕人成不卡一区| 日本美女一区二区三区| av爱爱亚洲一区| 欧美videos中文字幕| 亚洲人被黑人高潮完整版| 美女国产一区二区| 91片黄在线观看| 日韩精品中文字幕一区二区三区| 中文字幕精品一区二区精品绿巨人| 亚洲精品五月天| 国内精品国产成人国产三级粉色| 99精品欧美一区二区蜜桃免费 | 91福利小视频| 久久久久国色av免费看影院| 亚洲影院在线观看| 不卡电影一区二区三区| 欧美成人a视频|