拖动图片

【勇芳软件工作室】汉化HomePreviousNext

Win32 API包括用于在屏幕上拖动图像的功能。拖动功能可以平滑地,彩色地移动图像,而不会闪烁光标。可以拖动屏蔽和未屏蔽的图像。

ImageList_BeginDrag功能开始拖动操作。参数包括图像列表的句柄,要拖动的图像的索引以及图像中热点的位置。热点是拖动功能识别为图像的确切屏幕位置的单个像素。通常,应用程序设置热点,使其与鼠标光标的热点一致。ImageList_DragMove功能将图像移动到新位置。

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

ImageList_DragEnter在拖动操作期间锁定给定窗口的所有其他更新。如果您需要在拖动操作期间执行任何绘图,例如突出显示拖放操作的目标,则可以使用ImageList_DragLeave功能临时隐藏拖动的图像。另一种方法是使用GetDCEx函数与DCX_LOCKWINDOWUPDATE值来检索允许您绘制的设备上下文。但是,您必须小心,不要抹去拖动的图像。

ImageList_SetDragCursorImage通过将给定图像(通常是鼠标光标图像)与当前拖动图像组合来创建新的拖动图像。因为拖动功能在拖动操作期间使用新的图像,所以您应该使用ShowCursor功能在调用ImageList_SetDragCursorImage后隐藏实际的鼠标光标。否则,在拖动操作期间,系统可能显示有两个鼠标光标。

当应用程序调用{??989796033}时,系统创建一个临时的内部映像列表,可以将指定的拖动映像复制到内部列表。您可以使用ImageList_GetDragImage功能检索临时拖动图像列表的句柄。该函数还检索当前拖动位置,以及拖动图像相对于拖动位置的偏移量。