イメージ リストのイメージのドラッグ

更新 : 2007 年 11 月

CImageList には、イメージを画面上でドラッグするための関数が含まれています。この関数を使用すると、カーソルの点滅なしにカラーのイメージをスムースに移動できます。マスクされたイメージとマスクされていないイメージの双方をドラッグできます。

BeginDrag メンバ関数はドラッグ操作を開始します。パラメータには、ドラッグするイメージのインデックスとイメージ内のホット スポットの場所が含まれます。ホット スポットとは、ドラッグ用関数が画面上でのイメージの正確な場所として認識する単一のピクセルです。通常、アプリケーションは、マウス カーソルのホット スポットに一致するようにホット スポットを設定します。DragMove メンバ関数はイメージを新しい場所に移動します。

DragEnter メンバ関数は、ウィンドウ内のドラッグ イメージの初期位置を設定し、その位置にイメージを描画します。パラメータには、イメージを描画するウィンドウへのポインタと、ウィンドウ内の初期位置の座標を指定する点が含まれます。座標は、クライアント領域ではなく、ウィンドウの左上隅を原点にした相対的な位置です。これは、座標をパラメータとしてとるイメージ ドラッグ用の関数すべてに対して当てはまります。つまり、座標を指定するときには、境界、タイトル バー、メニュー バーなどのウィンドウ要素の幅を考慮する必要があります。DragEnter を呼び出すときに NULL ウィンドウ ハンドルを指定すると、ドラッグ用関数は、デスクトップ ウィンドウに関連付けられているデバイス コンテキストにイメージを描画します。この場合、座標は画面の左上隅を原点にした相対座標になります。

DragEnter メンバ関数は、ドラッグ操作の間、操作対象のウィンドウへの更新処理をすべてロックします。ドラッグ アンド ドロップ操作のターゲットを強調表示する場合など、ドラッグ操作中に描画を実行する場合、DragLeave メンバ関数を使用してドラッグされているイメージを一時的に非表示にできます。また、DragShowNoLock メンバ関数を使用することもできます。

イメージのドラッグを完了したら、EndDrag を呼び出します。

SetDragCursorImage メンバ関数は、指定したイメージ (通常はマウス カーソル イメージ) と現在のドラッグ イメージを組み合わせて新しいドラッグ イメージを作成します。ドラッグ関数はドラッグ操作中に新しいイメージを使うので、SetDragCursorImage を呼び出した後、実際のマウス カーソルを非表示にするために Windows の ShowCursor 関数を使用する必要があります。この処理を行わないと、ドラッグ操作中に 2 つのマウス カーソルが表示される可能性があります。

BeginDrag が呼び出されると、一時的な内部イメージ リストが作成され、指定したドラッグ イメージがその内部リストにコピーされます。GetDragImage メンバ関数を使用して、一時的なドラッグ イメージ リストへのポインタを取得できます。この関数では、現在のドラッグの位置と、この位置の相対位置にあるドラッグ イメージのオフセットも取得します。

参照

概念

コントロール (MFC)

参照

CImageList の使い方