Перетаскивание изображений из списка изображений
CImageList включает функции для перетаскивания изображения на экране. Функции перетаскивания плавно перемещают изображение, цветом и без мигания курсора. Можно перетаскивать как маскированные, так и незамаскированные изображения.
Функция-член BeginDrag начинает операцию перетаскивания. Параметры включают индекс изображения для перетаскивания и расположения горячей точки в изображении. Горячая точка — это один пиксель, который функции перетаскивания распознают как точное расположение экрана изображения. Как правило, приложение устанавливает горячее место таким образом, чтобы оно совпадало с горячей точкой курсора мыши. Функция-член DragMove перемещает изображение в новое расположение.
Функция-член DragEnter задает начальную позицию изображения перетаскивания в окне и рисует изображение в позиции. Параметры включают указатель на окно, в котором рисуется изображение и точка, указывающая координаты начальной позиции в окне. Координаты относительно левого верхнего угла окна, а не клиентской области. То же самое верно для всех функций перетаскивания изображений, которые принимают координаты в качестве параметров. Это означает, что при указании координат необходимо компенсировать ширину элементов окна, например границу, строку заголовка и строку меню. Если при вызове DragEnter
указан дескриптор null, функции перетаскивания рисуют изображение в контексте устройства, связанном с окном рабочего стола, и координаты относительно левого верхнего угла экрана.
DragEnter
блокирует все остальные обновления заданного окна во время операции перетаскивания. Если во время операции перетаскивания необходимо выполнить рисование, например выделение цели операции перетаскивания, можно временно скрыть перетаскиваемое изображение с помощью функции-члена DragLeave . Вы также можете использовать функцию-член DragShowNoLock .
Вызов EndDrag при перетаскивании изображения.
Функция-член SetDragCursorImage создает новое изображение перетаскивания путем объединения заданного изображения (обычно изображения курсора мыши) с текущим изображением перетаскивания. Так как функции перетаскивания используют новое изображение во время операции перетаскивания, следует использовать функцию Windows ShowCursor для скрытия фактического курсора мыши после вызова SetDragCursorImage
. В противном случае система может иметь два курсора мыши в течение длительности операции перетаскивания.
При вызове BeginDrag
приложения система создает временный, внутренний список изображений и копирует указанное изображение перетаскивания во внутренний список. Вы можете получить указатель на временный список изображений перетаскивания с помощью функции элемента GetDragImage . Функция также извлекает текущую позицию перетаскивания и смещение изображения перетаскивания относительно позиции перетаскивания.