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