CImageList には、イメージを画面上でドラッグするための関数が含まれています。 この関数を使用すると、カーソルの点滅なしにカラーのイメージをスムースに移動できます。 マスクされたイメージとマスクされていないイメージの双方をドラッグできます。
BeginDrag メンバー関数はドラッグ操作を開始します。 パラメーターには、ドラッグするイメージのインデックスとイメージ内のホット スポットの場所が含まれます。 ホット スポットとは、ドラッグ用関数が画面上でのイメージの正確な場所として認識する単一のピクセルです。 通常、アプリケーションは、マウス カーソルのホット スポットに一致するようにホット スポットを設定します。 DragMove メンバー関数はイメージを新しい場所に移動します。
DragEnter メンバー関数は、ウィンドウ内のドラッグ イメージの初期位置を設定し、その位置にイメージを描画します。 パラメーターには、イメージを描画するウィンドウへのポインターと、ウィンドウ内の初期位置の座標を指定する点が含まれます。 座標は、クライアント領域ではなく、ウィンドウの左上隅を原点にした相対的な位置です。 これは、座標をパラメーターとしてとるイメージ ドラッグ用の関数すべてに対して当てはまります。 つまり、座標を指定するときには、境界、タイトル バー、メニュー バーなどのウィンドウ要素の幅を考慮する必要があります。 DragEnter を呼び出すときに NULL ウィンドウ ハンドルを指定すると、ドラッグ用関数は、デスクトップ ウィンドウに関連付けられているデバイス コンテキストにイメージを描画します。この場合、座標は画面の左上隅を原点にした相対座標になります。
DragEnter メンバー関数は、ドラッグ操作の間、操作対象のウィンドウへの更新処理をすべてロックします。 ドラッグ アンド ドロップ操作のターゲットを強調表示する場合など、ドラッグ操作中に描画を実行する場合、DragLeave メンバー関数を使用してドラッグされているイメージを一時的に非表示にできます。 また、DragShowNoLock メンバー関数を使用することもできます。
イメージのドラッグを完了したら、EndDrag を呼び出します。
SetDragCursorImage メンバー関数は、指定したイメージ (通常はマウス カーソル イメージ) と現在のドラッグ イメージを組み合わせて新しいドラッグ イメージを作成します。 ドラッグ関数はドラッグ操作中に新しいイメージを使うので、SetDragCursorImage を呼び出した後、実際のマウス カーソルを非表示にするために Windows の ShowCursor 関数を使用する必要があります。 この処理を行わないと、ドラッグ操作中に 2 つのマウス カーソルが表示される可能性があります。
BeginDrag が呼び出されると、一時的な内部イメージ リストが作成され、指定したドラッグ イメージがその内部リストにコピーされます。 GetDragImage メンバー関数を使用して、一時的なドラッグ イメージ リストへのポインターを取得できます。 この関数では、現在のドラッグの位置と、この位置の相対位置にあるドラッグ イメージのオフセットも取得します。