实现鼠标拖动图像

来源:互联网 发布:淘宝店铺新店扶持流量 编辑:程序博客网 时间:2024/05/21 09:20

实现鼠标拖动图像

图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利用WINDOWS32位应用程序接口函数API绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。图像列表控制提供了控制图像列表的基本方法,这些方法在WINDOWS95及以后版本才能实现。

一)将图像移动到另一个位置,并保证原来图像的位置不变---ImageMove

首先在同一位置出创建两个一模一样的Picture控件。当单击一个控件时就获取该可以拖拽的图像,进行一个虚拟图像的拖动,松开鼠标后,即将另个一模一样的控件放在了指定的位置,而虚拟图像消失。

OnLButtonDown

1、创建一个要移动的虚拟图像

2、设置标志位,表示已经选择图像,可以进行拖动

3、设置起始位置的偏移量(相对于图像左上角的)

4m_imgDrag.DeleteImageList();  //下一次移动操作时可以不产生异常

5m_imgDrag.Create(rectPic.Width(), rectPic.Height(), ILC_COLOR32|ILC_MASK, 0, 1);  

//创建一个图像列表控制

6m_imgDrag.Add(&bitmapTemp, pOldBitmap);  //将选中的图像加入到图像列表控制 

7m_imgDrag.BeginDrag(0, m_ptOffset);  //开始进行拖拽

8m_imgDrag.DragEnter(NULL, ptPut);   //锁定图像,并显示

9SetCapture();  //捕获鼠标消息

OnMouseMove

1ClientToScreen(&m_ptMove);  

2CImageList::DragMove(m_ptMove);  //拖拽图像

OnLButtonUp

1、获取鼠标位置,并进行转化,移动第二个Picture控件到该位置

2CImageList::DragLeave(this);  //释放图像的拖动

3CImageList::EndDrag();  //结束图像拖动

4ReleaseCapture();   //释放捕获鼠标消息

5、更新第二个控件

6、置标志位,拖动结束

二)只是将控件移动

将一)OnLButtonUp中的第二个控件换位第一个控件即可,此功能只需要一个控件

三)只需要一个控件就可以实现功能一)---ImageMoveOneCtrl

1、只需修改一)OnLButtonUp函数,在该函数中实现一个屏幕坐标与用户坐标的转换,释放CImageList,并置子对话框重画位,子对话框RedrawWindow();

2、在子对话框中重载OnPaint函数,将选中的位图控件中的内容贴到鼠标抬起时的位置


原创粉丝点击