从图像列表中拖动图像

CImageList 包括用于在屏幕上拖动图像的函数。 拖动函数在颜色中流畅地移动图像,不闪烁光标。 可以拖动掩码和未屏蔽的图像。

BeginDrag 成员函数开始拖动作。 参数包括要拖动的图像索引以及图像中热点的位置。 热点是拖动功能识别为图像的确切屏幕位置的单个像素。 通常,应用程序设置热点,使其与鼠标光标的热点相吻合。 DragMove 成员函数将图像移动到新位置。

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

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

拖动完图像后,调用 EndDrag

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

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

另请参阅

使用 CImageList
控件