如何实现鼠标拖放文件
操作方法
- 01
一.1:取得要拖放的文件名与路径2:取得目标文件名与路径3:在拖动事件中把文件从原目录拷入目标目录4:取得文件图标放入TImageList5:以一种方式显示文件名和图标这里有些难度的是第四步,如何取得图标,现把刚学来的再告诉你(以在TListView显示图标为例):在头文件中加入:#define NO_WIN32_LEAN_AND_MEAN在.cpp中加入:SHFILEINFO FileInfo;THandle ImageListHandle;ImageListHandle = SHGetFileInfo(\"C:\\\\WINDOWS\\\\Start Menu\\\\Programs\\\\Microsoft FrontPage.lnk\", 0, &FileInfo, sizeof(FileInfo), SHGFI_SYSICONINDEX ¦ SHGFI_LARGEICON);SendMessage(lstvwVirtualList->Handle, LVM_SETIMAGELIST, LVSIL_SMALL, ImageListHandle);TListItem * pItem;SHGetFileInfo(\"C:\\\\WINDOWS\\\\Start Menu\\\\Programs\\\\Microsoft FrontPage.lnk\", 0, &FileInfo, sizeof(FileInfo),SHGFI_ICON;SHGFI_LARGEICON);pItem=lstvwVirtualList->Items->Add();pItem->ImageIndex=FileInfo.iIcon;SHGetFileInfo(\"C:\\\\WINDOWS\\\\Start Menu\\\\Programs\\\\DRVSPACE.EXE\", 0, &FileInfo, sizeof(FileInfo),SHGFI_ICON;SHGFI_LARGEICON );pItem=lstvwVirtualList->Items->Add();pItem->ImageIndex=FileInfo.iIcon;这样就可取得2个文件的图标,如果有其他文件可也再加二.首先在FormCreate时调用DragAcceptFiles(this,true)注册你的程序,使得你的程序可以接受文件的DragDrop然后处理WM_DROPFILES消息,获得DropDrag的消息,调用如下函数获得相关的参数::UINT DragQueryFile( HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch);BOOL DragQueryPoint( HDROP hDrop, LPPOINT lppt);最后用下面的函数接受DragDrop的动作VOID DragFinish( HDROP hDrop);三.在头文件里加上:private: // User declarations void __fastcall AcceptFiles(TMessage& Msg);public: // User declarations __fastcall TForm1(TComponent* Owner); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DROPFILES,TMessage,AcceptFiles) END_MESSAGE_MAP(TForm) 一段代码,希望对你有些帮助://---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){ DragAcceptFiles(this->Handle,true);}//---------------------------------------------------------------------------void __fastcall TForm1::AcceptFiles(TMessage& Msg){ const int m_nMaxFileNameLen=255; int i,m_nCount; char m_sFileName[m_nMaxFileNameLen]; m_nCount=DragQueryFile((HANDLE)Msg.WParam,0xffffffff,m_sFileName,m_nMaxFileNameLen); for(i=0;i<m_nCount;i++) { DragQueryFile((HANDLE)Msg.WParam,i,m_sFileName,m_nMaxFileNameLen); MessageBox(this->Handle,m_sFileName,\"Drop File\",MB_OK); } DragFinish((HANDLE)Msg.WParam);}四.在需要拖放的窗体类中加入消息处理映射,如下:BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WMDropFiles)END_MESSAGE_MAP (TForm);在相应的cpp文件进入消息处理函数,如下:void __fastcall TForm1::WMDropFiles(TWMDropFiles &message){ UINT filecount = DragQueryFile((HDROP) message.Drop, 0xFFFFFFFF, NULL, 0); //查询拖放的文件数量 for(int n=0;n<=filecount-1;n++) { String filename; filename.SetLength(MAX_PATH); int length = DragQueryFile ((HDROP) message.Drop,n,filename.c_str (), MAX_PATH); filename.SetLength (length); //在这儿替换你的处理代码 } DragFinish ((HDROP) message.Drop);}在窗体类的OnCreate事件中加入如下代码,DragAcceptFiles(Handle,true);OK,就这么简单,另外其他窗体类控件同样可以,如ListView等。以上内容均出自上嵌编辑发布、转载需告知。