DoDragDrop 関数 (ole2.h)
OLE ドラッグ アンド ドロップ操作を実行します。
構文
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を返します。 その他の使用可能な値は次のとおりです。
リターン コード | 説明 |
---|---|
|
OLE のドラッグ アンド ドロップ操作が成功しました。 |
|
OLE のドラッグ アンド ドロップ操作が取り消されました。 |
|
Unexpected error occurred. (予期しないエラーが発生しました。) |
注釈
OLE ドラッグ アンド ドロップ操作のデータ ソースとして機能するアプリケーションを開発する場合は、ユーザーが OLE ドラッグ アンド ドロップ操作を開始したことを検出したときに DoDragDrop を呼び出す必要があります。
DoDragDrop 関数は、IDropSource インターフェイスと IDropTarget インターフェイスのさまざまなメソッドを呼び出すループに入ります。 (ドラッグ アンド ドロップ操作を成功させるには、データ ソースとして動作するアプリケーションも IDropSource を実装する必要があり、ターゲット アプリケーションは IDropTarget を実装する必要があります)。
- DoDragDrop 関数は、現在のカーソル位置の下のウィンドウを決定します。 次に、このウィンドウが有効なドロップ ターゲットであるかどうかを確認します。
- ウィンドウが有効なドロップ ターゲットの場合、 DoDragDrop は IDropTarget::D ragEnter を呼び出します。 このメソッドは、ドロップが実際に発生した場合に何が起こるかを示す効果コードを提供します。 有効なドロップ効果の一覧については、 DROPEFFECT 列挙を参照してください。
- DoDragDrop は、ドロップ ソース インターフェイスがユーザーに適切な視覚的フィードバックを提供できるように、効果コードで IDropSource::GiveFeedback を呼び出します。 DoDragDrop に渡される pDropSource ポインターは、適切な IDropSource インターフェイスを指定します。
-
DoDragDrop は、マウス カーソルの動きとキーボードまたはマウス ボタンの状態の変化を追跡します。
- ユーザーがウィンドウの外に移動すると、 DoDragDrop は IDropTarget::D ragLeave を呼び出します。
- マウスが別のウィンドウに入ると、 DoDragDrop はそのウィンドウが有効なドロップ ターゲットであるかどうかを判断し、そのウィンドウに対 して IDropTarget::D ragEnter を呼び出します。
- マウスが移動しても同じウィンドウ内に留まる場合、 DoDragDrop は IDropTarget::D ragOver を呼び出します。
-
キーボードまたはマウス ボタンの状態が変更された場合、 DoDragDrop は IDropSource::QueryContinueDrag を呼び出し、ドラッグを続行するか、データをドロップするか、戻り値に基づいて操作を取り消すかを決定します。
- 戻り値がS_OK場合、 DoDragDrop は最初に IDropTarget::D ragOver を呼び出して操作を続行します。 このメソッドは新しい効果の値を返し、 DoDragDrop は IDropSource::GiveFeedback を呼び出して新しい効果を呼び出し、適切な視覚的フィードバックを設定できるようにします。 有効なドロップ効果の一覧については、 DROPEFFECT 列挙を参照してください。 IDropTarget::D ragOver と IDropSource::GiveFeedback はペアになっているため、マウスがドロップ ターゲットを越えて移動すると、ユーザーにはマウスの位置に関する最新のフィードバックが表示されます。
- 戻り値がDRAGDROP_S_DROP場合、 DoDragDrop は IDropTarget::D rop を呼び出します。 DoDragDrop 関数はソースに最後の効果コードを返します。そのため、ソース アプリケーションはソース データに対して適切な操作を実行できます。たとえば、操作が移動の場合はデータを切り取ります。
- 戻り値がDRAGDROP_S_CANCEL場合、 DoDragDrop 関数は IDropTarget::D ragLeave を呼び出します。
タッチまたはペン入力をサポートするには、タッチ ハンドラーから DoDragDrop を呼び出さないでください。 代わりに、システムがタッチ入力時に合成するマウス メッセージに対して、ハンドラーから DoDragDrop を呼び出します。
アプリケーションは、 GetMessageExtraInfo 関数を呼び出すことによって、合成されたメッセージを識別できます。 GetMessageExtraInfo を使用してマウス入力と Windows Touch 入力を区別する方法の詳細については、「アプリケーションのトラブルシューティング」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | ole2.h |
Library | Ole32.lib |
[DLL] | Ole32.dll |