共用方式為


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 置放目標

  1. 如果尚未存在,請在應用程式的成員函式中新增 對 的 InitInstance 呼叫 AfxOleInit 。 需要此呼叫才能初始化 OLE 程式庫。

  2. 將成員變數新增至您想要成為置放目標之應用程式中的每個檢視。 這個成員變數的類型或衍生自它的類別。 COleDropTarget

  3. 從處理 WM_CREATE 訊息的檢視類別函式中, OnCreate 呼叫新的成員變數 Register 成員函式。 Revoke 當您的檢視終結時,系統會自動為您呼叫 。

  4. 覆寫下列函式。 如果您想要在整個應用程式中使用相同的行為,請在檢視類別中覆寫這些函式。 如果您想要在隔離的情況下修改行為,或想要在非 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