win32实现图片Drag & Drop

04月14日2014 windows编程 win32 看评论

图片拖放操作的实现原理: 创建一个ImageList,将要拖动的图片防入ImageList 中。然后,响应相应的消息即可。当鼠标点击左键时,获取鼠标的位置,这时候图片的拖放操作开始。 如果鼠标的左键松开,那么这次的拖放操作结束。

在拖放开始时,调用ImageList_BeginDrag函数,然后调用ImageList_DragEnter,进入到拖放中。接下来,我们要响应鼠标移动的事件,获取鼠标的位置,并调用ImageList_DragMove处理ImageList中图片的移动。这样,我们便能在鼠标移动的位置将图片显示出来。最后就是,当用户松开鼠标左键的时候,本次拖动结束,应该调用ImageList_EndDrag 和 ImageList_DragLeave结束拖放操作。

下面的程序是我自己做个一个关于拖放的例子,能够播放音乐,自动根据位置发牌。牌的选择数量上限是3张,可以更改,是利用链表实现。

关键代码是:

case  WM_MOUSEMOVE:

		if(tFg.belong==1)
		{
		ClipCursor(&rct);
		ImageList_DragMove(LOWORD(lParam),HIWORD(lParam));
		}
		break;
	case WM_LBUTTONDOWN:
	     pts=MAKEPOINTS(lParam);
	     pt.x=(long)pts.x;
	     pt.y=(long)pts.y;
  if(PtInRect(&rect[0],pt))
	  {
               dex[0]=GetL(1);
		dex[1]=pt.x/C_COR;
		 if(dex[1]


截图省略:

附:程序的源代码下载地址是(整个工程文件--vs2005-sdk7.01-win32-c):http://iask.sina.com.cn/u/2659865120/ish?folderid=0