win32实现图片Drag & Drop
图片拖放操作的实现原理: 创建一个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