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