如何在ListView中实现拖动?并且如何保存它们的位置?

xlhome 2001-04-16 09:36:00
各个高手:
在LISTVIEW组件中,已经把viewstyle属性设为VSICON,dragmode属性设为自动,还需要
什么条件才能实现它的Items的任意拖动,并且如何保存它们的位置?
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dufeng3104 2001-04-17
  • 打赏
  • 举报
回复
有点错误
void __fastcall TFrm_set::FormCreate(TObject *Sender)
{
SHFILEINFO FileInfo;
THandle ImageListHandle;
ImageListHandle=SHGetFileInfo("C:\\", 0,&FileInfo, sizeof(FileInfo),SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
SendMessage(ListView1->Handle, LVM_SETIMAGELIST, LVSIL_SMALL,ImageListHandle);*****
DragAcceptFiles(Handle, true);
}
dufeng3104 2001-04-17
  • 打赏
  • 举报
回复
此代码是用C++ Builder实现的,希望能够解决你的问题

public: // User declarations

__fastcall TFrm_set(TComponent* Owner);
//增加对WM_DROPFILES消息的处理,WMDropFiles是消息处理函数
void __fastcall WMDropFiles(TMessage &Msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_DROPFILES, TMessage, WMDropFiles)
END_MESSAGE_MAP(TForm);


void __fastcall TFrm_set::FormCreate(TObject *Sender)
{
SHFILEINFO FileInfo;
THandle ImageListHandle;
ImageListHandle=SHGetFileInfo("C:\\", 0,&FileInfo, sizeof(FileInfo),SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
SendMessage(ListView4->Handle, LVM_SETIMAGELIST, LVSIL_SMALL,ImageListHandle);
DragAcceptFiles(Handle, true);
}

void __fastcall TFrm_set::WMDropFiles(TMessage &Msg)
{
//消息的WParam参数是拖放文件的句柄
HDROP hDrop = (HANDLE)Msg.WParam;
int FileNums;
char FileName[255];
SHFILEINFO FileInfo;
TListItem *pItem;
//DragQueryFile函数获得拖放文件的信息,当第二个参数为0xFFFFFFFF时,返回文件的数量
FileNums = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 255);
for(int i = 0; i < FileNums; i++)
{
//FileName返回第i个文件的文件名
DragQueryFile(hDrop, i, FileName, 255);
AnsiString ls_str,ls_Ext;
int j;
ls_str=FileName;
ls_str=ExtractFileName(FileName);
pItem=ListView1->Items->Add();
j=Read_PointPos(ls_str);//此函数为自定义的取文件名最后一个“.”的位置
if(j!=0)
{
AnsiString ls_filename;
ls_filename=ls_str.SubString(1,j-1);
pItem->Caption=ls_filename;
ls_filename=Drag_Pathname+ls_str;//Drag_Pathname为目标位置
CopyFile(FileName,ls_filename.c_str(),false);
SHGetFileInfo(FileName, 0, &FileInfo, sizeof(FileInfo),SHGFI_ICON|SHGFI_SMALLICON );
pItem->ImageIndex=FileInfo.iIcon;
ListView1->Refresh();
}
}
DragFinish(hDrop);
}
Wingsun 2001-04-17
  • 打赏
  • 举报
回复
你需要处理它的DragDrop的相关事件,这样才可以让他们移动你拖到的位置。可以将每一个Item的位置保存在一个文件中就可以了,下次取出就可了。
「已注销」 2001-04-16
  • 打赏
  • 举报
回复
图标放置有图标的位置 你记下

根据这个坐标

设置一下图标的位置就可以了

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧