CImageList 包括用于在屏幕上拖动图像的函数。 拖动函数在颜色中流畅地移动图像,不闪烁光标。 可以拖动加了掩码的图像和未加掩码的图像。
BeginDrag 成员函数开始拖动作。 参数包括要拖动的图像索引以及图像中热点的位置。 热点是拖动功能识别为图像的确切屏幕位置的单个像素。 通常,应用程序设置热点,使其与鼠标光标的热点相吻合。 DragMove 成员函数将图像移动到新位置。
DragEnter 成员函数设置拖动图像在窗口中的初始位置,并在该位置绘制图像。 参数包括指向绘制图像的窗口的指针,以及指定窗口内初始位置的坐标的点。 坐标相对于窗口的左上角,而不是工作区。 对于将坐标作为参数的所有图像拖动函数,也是如此。 这意味着在指定坐标时,必须补偿窗口元素的宽度,例如边框、标题栏和菜单栏。 如果在调用时指定 DragEnter 窗口句柄,则拖动函数将在与桌面窗口关联的设备上下文中绘制图像,坐标相对于屏幕左上角。
DragEnter 在拖动作期间锁定给定窗口的所有其他更新。 如果需要在拖动作期间执行任何绘图,例如突出显示拖放作的目标,则可以使用 DragLeave 成员函数暂时隐藏拖动的图像。 还可以使用 DragShowNoLock 成员函数。
拖动完图像后,调用 EndDrag 。
SetDragCursorImage 成员函数通过将给定图像(通常是鼠标光标图像)与当前拖动图像组合来创建新的拖动图像。 由于拖动函数在拖动作期间使用新图像,因此应在调用后使用 Windows SetDragCursorImage 函数隐藏实际的鼠标光标。 否则,系统在拖动操作期间可能看起来具有两个鼠标光标。
应用程序调用 BeginDrag时,系统会创建一个临时的内部映像列表,并将指定的拖动图像复制到内部列表。 可以使用 GetDragImage 成员函数检索指向临时拖动图像列表的指针。 此函数还将检索当前拖动位置和拖动图像相对于拖动位置的偏移量。