DoDragDrop 関数 (ole2.h)

OLE ドラッグ アンド ドロップ操作を実行します。

メモ この関数を呼び出す前 に、OleInitialize を呼び出す必要があります。
 

構文

HRESULT DoDragDrop(
  [in]  LPDATAOBJECT pDataObj,
  [in]  LPDROPSOURCE pDropSource,
  [in]  DWORD        dwOKEffects,
  [out] LPDWORD      pdwEffect
);

パラメーター

[in] pDataObj

ドラッグされるデータを含むデータ オブジェクト上の IDataObject インターフェイスへのポインター。

[in] pDropSource

ドラッグ操作中にソースと通信するために使用される IDropSource インターフェイスの実装へのポインター。

[in] dwOKEffects

OLE ドラッグ アンド ドロップ操作でソースが許可する効果。 最も重要なのは、移動を許可するかどうかです。 dwOKEffect パラメーターと pdwEffect パラメーターは、DROPEFFECT 列挙から値を取得します。 値の一覧については、「 DROPEFFECT」を参照してください。

[out] pdwEffect

OLE ドラッグ アンド ドロップ操作がソース データに与えた影響を示す値へのポインター。 pdwEffect パラメーターは、操作が取り消されない場合にのみ設定されます。

戻り値

この関数は、成功したS_OKを返します。 その他の使用可能な値は次のとおりです。

リターン コード 説明
DRAGDROP_S_DROP
OLE のドラッグ アンド ドロップ操作が成功しました。
DRAGDROP_S_CANCEL
OLE のドラッグ アンド ドロップ操作が取り消されました。
E_UNSPEC
Unexpected error occurred. (予期しないエラーが発生しました。)

注釈

OLE ドラッグ アンド ドロップ操作のデータ ソースとして機能するアプリケーションを開発する場合は、ユーザーが OLE ドラッグ アンド ドロップ操作を開始したことを検出したときに DoDragDrop を呼び出す必要があります。

DoDragDrop 関数は、IDropSource インターフェイスと IDropTarget インターフェイスのさまざまなメソッドを呼び出すループに入ります。 (ドラッグ アンド ドロップ操作を成功させるには、データ ソースとして動作するアプリケーションも IDropSource を実装する必要があり、ターゲット アプリケーションは IDropTarget を実装する必要があります)。

  1. DoDragDrop 関数は、現在のカーソル位置の下のウィンドウを決定します。 次に、このウィンドウが有効なドロップ ターゲットであるかどうかを確認します。
  2. ウィンドウが有効なドロップ ターゲットの場合、 DoDragDropIDropTarget::D ragEnter を呼び出します。 このメソッドは、ドロップが実際に発生した場合に何が起こるかを示す効果コードを提供します。 有効なドロップ効果の一覧については、 DROPEFFECT 列挙を参照してください。
  3. DoDragDrop は、ドロップ ソース インターフェイスがユーザーに適切な視覚的フィードバックを提供できるように、効果コードで IDropSource::GiveFeedback を呼び出します。 DoDragDrop に渡される pDropSource ポインターは、適切な IDropSource インターフェイスを指定します。
  4. DoDragDrop は、マウス カーソルの動きとキーボードまたはマウス ボタンの状態の変化を追跡します。
    • ユーザーがウィンドウの外に移動すると、 DoDragDropIDropTarget::D ragLeave を呼び出します。
    • マウスが別のウィンドウに入ると、 DoDragDrop はそのウィンドウが有効なドロップ ターゲットであるかどうかを判断し、そのウィンドウに対 して IDropTarget::D ragEnter を呼び出します。
    • マウスが移動しても同じウィンドウ内に留まる場合、 DoDragDropIDropTarget::D ragOver を呼び出します。
  5. キーボードまたはマウス ボタンの状態が変更された場合、 DoDragDropIDropSource::QueryContinueDrag を呼び出し、ドラッグを続行するか、データをドロップするか、戻り値に基づいて操作を取り消すかを決定します。
    • 戻り値がS_OK場合、 DoDragDrop は最初に IDropTarget::D ragOver を呼び出して操作を続行します。 このメソッドは新しい効果の値を返し、 DoDragDropIDropSource::GiveFeedback を呼び出して新しい効果を呼び出し、適切な視覚的フィードバックを設定できるようにします。 有効なドロップ効果の一覧については、 DROPEFFECT 列挙を参照してください。 IDropTarget::D ragOverIDropSource::GiveFeedback はペアになっているため、マウスがドロップ ターゲットを越えて移動すると、ユーザーにはマウスの位置に関する最新のフィードバックが表示されます。
    • 戻り値がDRAGDROP_S_DROP場合、 DoDragDropIDropTarget::D rop を呼び出します。 DoDragDrop 関数はソースに最後の効果コードを返します。そのため、ソース アプリケーションはソース データに対して適切な操作を実行できます。たとえば、操作が移動の場合はデータを切り取ります。
    • 戻り値がDRAGDROP_S_CANCEL場合、 DoDragDrop 関数は IDropTarget::D ragLeave を呼び出します。
DoDragDrop では、タッチ入力またはペン入力を処理するときにドラッグ アンド ドロップのサポートを呼び出す機能はサポートされていません。

タッチまたはペン入力をサポートするには、タッチ ハンドラーから DoDragDrop を呼び出さないでください。 代わりに、システムがタッチ入力時に合成するマウス メッセージに対して、ハンドラーから DoDragDrop を呼び出します。

アプリケーションは、 GetMessageExtraInfo 関数を呼び出すことによって、合成されたメッセージを識別できます。 GetMessageExtraInfo を使用してマウス入力と Windows Touch 入力を区別する方法の詳細については、「アプリケーションのトラブルシューティング」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー ole2.h
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

IDropSource