从图像列表拖动图像

CImageList 包含在屏幕上拖动图像的函数。 拖动函数可以流畅地拖动图像,光标没有任何闪烁。 添加了蒙板的图像和未添加蒙板的图像均可拖动。

BeginDrag 成员函数开始拖动操作。 参数包括要拖动图像的索引和图像中作用点的位置。 作用点是拖动函数识别为图像的确切屏幕位置的单一像素。 通常,应用程序将设置作用点,以便它与鼠标光标的作用点一致。 DragMove 成员函数将图像移至新位置。

DragEnter 成员函数设置拖动图像在窗口中的初始位置,并在该位置绘制图像。 参数包括一个指向绘制图像窗口的指针和一个指定窗口中初始位置的坐标的点。 坐标相对于窗口的左上角,而不是工作区。 上述情况同样适用于将坐标作为参数使用的所有图像拖动函数。 这意味着您在指定坐标时必须补偿窗口元素的宽度,如边框、标题栏和菜单栏。 如果在调用 DragEnter 时指定 NULL 窗口句柄,则拖动函数将在与桌面窗口关联的设备上下文中绘制图像,并且坐标与屏幕的左上角相对

DragEnter 在拖动操作期间将锁定给定窗口的所有其他更新。 如果需要在拖动操作期间执行任何绘图,如突出显示拖放操作的目标,则可以使用 DragLeave 成员函数临时隐藏拖动图像。 还可以使用 DragShowNoLock 成员函数。

完成图像拖动后,请调用 EndDrag

SetDragCursorImage 成员函数将通过组合给定图像(通常是鼠标光标图像)与当前拖动图像来创建新的拖动图像。 由于拖动函数将在拖动操作期间使用新图像,因此你应使用 Windows ShowCursor 函数在调用 SetDragCursorImage 后隐藏实际鼠标光标。 否则,系统在拖动操作期间可能看起来具有两个鼠标光标。

当应用程序调用 BeginDrag 后,系统将创建一个临时的内部图像列表并将指定拖动图像复制到内部列表中。 可通过使用 GetDragImage 成员函数来检索指向临时拖动图像列表的指针。 此函数还将检索当前拖动位置和拖动图像相对于拖动位置的偏移量。

另请参阅

使用 CImageList
Controls