关于鼠标拖放操作

zl811103 2012-06-15 02:22:17
我想将某个文件夹用鼠标拖放到我编写的程序的窗口里面,然后我的程序获得这个文件夹的绝对路径。请问如何实现?我看过其他的帖子说是用Shell扩展,还有其他比较簡単的实现方法吗?
...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ludaokai 2013-07-17
  • 打赏
  • 举报
回复
引用 1 楼 ccrun 的回复:
从Exploer拖放到你的程序中,这个简单,处理WM_DROPFILES消息即可。如果是想从自己的程序中拖出到Explorer中,这个才需要用到Shell扩展。
你好,我现在想在delphi中,实现 把文件拖放到Exploer中或 其它可以接受拖放文件的软件中,怎么实现呢?
zl811103 2012-06-15
  • 打赏
  • 举报
回复
good!测试通过!~!
zl811103 2012-06-15
  • 打赏
  • 举报
回复
好的,我试试先
ccrun.com 2012-06-15
  • 打赏
  • 举报
回复
我在2楼的代码,只处理了拖放的第一个文件,如果要处理多个,更改DragQueryFile的第2个参数即可。
ccrun.com 2012-06-15
  • 打赏
  • 举报
回复
简单示例:

首先需要设置使窗体接受拖放
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// 使窗体接受拖放
::DragAcceptFiles(Handle, true);
}


然后通过重载WndProc过程实现对WM_DROPFILES消息的拦截处理:
.h文件中:
private:	// User declarations
void __fastcall WndProc(TMessage &Msg);

.cpp文件中:
void __fastcall TForm1::WndProc(TMessage &Msg)
{
if (Msg.Msg == WM_DROPFILES)
{
TCHAR szFileName[MAX_PATH];
UINT uFileCount = ::DragQueryFile((HDROP)Msg.WParam, 0, szFileName, MAX_PATH);
::DragFinish((HDROP)Msg.WParam);
if (!uFileCount) return;

Caption = szFileName;
}
TForm::WndProc(Msg);
}
ccrun.com 2012-06-15
  • 打赏
  • 举报
回复
从Exploer拖放到你的程序中,这个简单,处理WM_DROPFILES消息即可。如果是想从自己的程序中拖出到Explorer中,这个才需要用到Shell扩展。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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