OLE 拖放
OLE 的拖放功能主要是複製並貼上資料的捷徑。 當您使用 [剪貼簿] 複製或貼上資料時,需要幾個步驟。 您可以選取資料,然後從 [編輯 ] 功能表選擇 [剪下 ] 或 [ 複製 ]。 然後,您會移至目的地應用程式或視窗,並將游標放在目標位置。 最後,從功能表中選擇 [ 編輯 > 貼上]。
OLE 拖放功能與檔案管理員拖放機制不同。 檔案管理員只能處理檔案名,並專為將檔案名傳遞至應用程式而設計。 在 OLE 中拖放更為一般。 它允許您拖放可以放置在剪貼簿上的任何資料。
當您使用 OLE 拖放時,您會從整個流程中移除兩個步驟。 您從來源視窗選取資料(「置放來源」),然後將它拖曳至目的地(「置放目標」)。 您可以放開滑鼠按鍵來卸載它。 此作業不需要功能表,而且比複製/貼上順序更快。 只有一個需求:卸載來源和置放目標必須開啟,且至少在螢幕上顯示部分顯示。
使用 OLE 拖放功能,可以輕鬆地將資料從某個位置傳輸到另一個位置:在檔內、不同檔之間,或應用程式之間。 它可以在容器或伺服器應用程式中實作。 任何應用程式都可以是置放來源、置放目標或兩者。 如果應用程式同時實作置放來源和置放目標支援,您可以在子視窗之間或一個視窗之間拖放。 這項功能可讓您的應用程式更容易使用。
Data 物件和資料來源 (OLE) 文章說明如何在應用程式中實作資料傳輸。 檢查 MFC OLE 範例 OCLIENT 和 HIERSVR 也很有説明。
實作置放來源
若要讓應用程式將資料提供給拖放作業,您可以實作置放來源。 卸載來源的基本實作相當簡單。 第一個步驟是判斷哪些事件開始拖曳作業。 建議的使用者介面指導方針會定義拖曳作業的開頭,就像在 一些選取資料內的點發生WM_LBUTTONDOWN 事件時一樣。 MFC OLE 範例 OCLIENT 和 HIERSVR 遵循這些指導方針。
如果您的應用程式是容器,且選取的資料是連結或類型的 COleClientItem
内嵌物件,請呼叫其 DoDragDrop
成員函式。 否則,請建構 COleDataSource
物件、使用選取專案將其初始化,並呼叫資料來源物件的 DoDragDrop
成員函式。 如果您的應用程式是伺服器,請使用 COleServerItem::DoDragDrop
。 如需自訂標準拖放行為的相關資訊,請參閱自訂拖放 行為一節 。
如果 DoDragDrop
傳 回DROPEFFECT_MOVE ,請立即從來源文件刪除來源資料。 沒有其他 傳回值 DoDragDrop
對置放來源有任何影響。
如需詳細資訊,請參閱 OLE 資料物件和資料來源:建立和破壞 ,以及 OLE 資料物件和資料來源:操作 。
實作置放目標
實作置放目標比置放來源稍微多一點,但還是比較簡單。
實作 OLE 置放目標
如果尚未存在,請在應用程式的成員函式中新增 對 的
InitInstance
呼叫AfxOleInit
。 需要此呼叫才能初始化 OLE 程式庫。將成員變數新增至您想要成為置放目標之應用程式中的每個檢視。 這個成員變數的類型或衍生自它的類別。
COleDropTarget
從處理 WM_CREATE 訊息的檢視類別函式中,
OnCreate
呼叫新的成員變數Register
成員函式。Revoke
當您的檢視終結時,系統會自動為您呼叫 。覆寫下列函式。 如果您想要在整個應用程式中使用相同的行為,請在檢視類別中覆寫這些函式。 如果您想要在隔離的情況下修改行為,或想要在非
CView
視窗上啟用卸載,請在衍生類別中COleDropTarget
覆寫這些函式。覆寫 允許 OnDragEnter
卸載要發生在視窗中的作業。 當游標第一次進入視窗時呼叫。 OnDragLeave
拖曳作業離開指定的視窗時的特殊行為。 OnDragOver
卸載要發生在視窗中的作業。 當游標拖曳到視窗時呼叫。 OnDrop
正在卸載至指定視窗的資料處理。 OnScrollBy
在目標視窗中需要捲動時的特殊行為。
請參閱 MAINVIEW。CPP 檔案是 MFC OLE 範例 OCLIENT 的一部分,例如這些函式如何一起運作。
如需詳細資訊,請參閱 OLE 資料物件和資料來源:建立和破壞 ,以及 OLE 資料物件和資料來源:操作 。
自訂拖放
拖放功能的預設實作對大部分應用程式而言已經足夠。 不過,某些應用程式可能需要您變更此標準行為。 本節說明變更這些預設值所需的步驟。 您可以使用這項技術,將不支援複合檔案的應用程式放入置放來源。
如果您要自訂標準 OLE 拖放行為,或您有非 OLE 應用程式,您必須建立 COleDataSource
物件來包含資料。 當使用者開始拖放作業時,您的程式碼應該從此物件而不是從其他支援拖放作業的類別呼叫 DoDragDrop
函式。
或者,您可以建立 COleDropSource
物件來控制置放並且根據您要變更的行為類型覆寫其中的一些函式。 這個置放來源物件隨後會傳遞至 COleDataSource::DoDragDrop
,以變更這些函式的預設行為。 這些不同選項可讓您在支援應用程式的拖放作業時擁有更多的彈性。 如需資料來源的詳細資訊,請參閱資料物件和資料來源(OLE) 一文 。
您可以覆寫下列函式以自訂拖放作業:
覆寫 | 自訂 |
---|---|
OnBeginDrag |
呼叫 之後 DoDragDrop ,拖曳作業的開始方式。 |
GiveFeedback |
不同置放結果的視覺化回饋,例如游標外觀。 |
QueryContinueDrag |
拖放作業的終止。 此函式可讓您在拖曳作業期間檢查輔助按鍵狀態。 |
另請參閱
OLE
OLE Data 物件和資料來源
OLE 資料物件和資料來源:建立和銷毀
OLE 資料物件和資料來源:操作
COleClientItem::D oDragDrop
COleDataSource 類別
COleDataSource::D oDragDrop
COleDropSource 類別
COleDropTarget 類別
CView::OnDragLeave