2012-09-10 38 views
-1

我用簡單的編輯控件和使用win32 API的按鈕創建了非MFC GUI。現在我得到了將瀏覽器URL拖放到我的GUI應用程序的編輯控件之一的要求,我該怎麼做? Win32 Api支持這個功能嗎?對win32 GUI的拖放支持

+0

>我創建非MFC GUI使用Win32 API的簡單編輯控件和按鈕.... .......... 您是否選擇開始這個GUI,知道稍後會添加更多的需求? –

+0

看看[this](http:// stackoverflow。com/a/449943/1569168)答案,它是關於拖動文件,但它應該與瀏覽器URL一起工作(可能需要一些額外的解析)。 – ErikEsTT

+0

可能的重複[拖放在winapi](http://stackoverflow.com/questions/190596/drag-and-drop-in-winapi) – MSalters

回答

1

COM可用於以下方式:

IDropSource interface
由包含拖動數據的對象實現,稱爲拖動源。 IDropSource接口是您實現的在您的應用程序中提供拖放操作的接口之一。它包含在拖放操作中用作數據源的任何應用程序中使用的方法。拖放操作中的數據源應用程序負責:

根據用戶的選擇確定被拖動的數據。 根據用戶的鼠標動作啓動拖放操作。 在拖放操作期間生成一些視覺反饋,例如設置光標並突出顯示爲拖放操作選擇的數據。 根據用戶的鼠標操作取消或完成拖放操作。 對由拖放操作導致的原始數據執行任何操作,例如通過拖動操作刪除數據。 IDropSource包含用於爲最終用戶生成視覺反饋以及取消或完成拖放操作的方法。您還需要在拖放操作中調用DoDragDrop,RegisterDragDrop和RevokeDragDrop函數。

IDropTarget interface
由旨在接受放置的對象實現,稱爲放置目標。IDropTarget接口是您實現的用於在應用程序中提供拖放操作的接口之一。它包含在拖放操作期間可以作爲數據目標的任何應用程序中使用的方法。放置目標應用程序負責:

確定放置對目標應用程序的影響。 在發生丟棄時合併任何有效的丟棄數據。 將目標反饋傳遞給源,以便源應用程序可以提供適當的視覺反饋,例如設置光標。 實現拖動滾動。 註冊並撤消其應用程序窗口作爲放置目標。 IDropTarget接口包含處理所有這些責任的方法,除了註冊和撤銷應用程序窗口作爲放置目標,您必須調用RegisterDragDrop和RevokeDragDrop函數。

DoDragDrop function
實施OLE並用於啓動拖放操作。一旦操作正在進行,它便於拖動源和放置目標之間的通信。

 

    Carries out an OLE drag and drop operation. 

WINOLEAPI DoDragDrop(
    IDataObject * pDataObject, //Pointer to the data object 
    IDropSource * pDropSource, //Pointer to the source 
    DWORD dwOKEffect,   //Effects allowed by the source 
    DWORD * pdwEffect   //Pointer to effects on the source 
); 


+0

要添加到此,請拖動一個URL會在提供的'IDataObject'中顯示爲'CFSTR_INETURL'或'CFSTR_SHELLURL'格式。 –