将文件拖曳到窗体上, 并获取其完整路径 【C++ Builder下实现】转
1. 在窗体的头文件.h里声明处理函数和消息映射, 如:
- class TForm1 : public TForm
- {
- ...
- void __fastcall HandleDropFiles(TMessage &Owner;
- ...
- BEGIN_MESSAGE_MAP
- MESSAGE_HANDLER(WM_DROPFILES,TMessage,HandleDropFiles)
- END_MESSAGE_MAP(TForm)
- };
2. 在窗体的实现文件.cpp中, 添加代码
FormCreate事件响应中:
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- ...
- DragAcceptFiles(Handle,true);
- ...
- }
最重要的处理函数HandleDropFiles:
- void __fastcall TForm1::HandleDropFiles(TMessage &msg)
- {
- char FileName[_MAX_PATH];
- int i, Sum;
- // 获得拖拉的文件数目,该功能由第二个参数决定
- Sum = DragQueryFile(HDROP(msg.WParam), 0xFFFFFFFF, NULL, 0);
- if(Sum > 0)
- {
- // 这里只要第一个文件
- DragQueryFile(HDROP(msg.WParam), 0, FileName, _MAX_PATH);
- // 将文件路径显示于窗体上的Text控件
- txtPath->Text = AnsiString(FileName);
- }
- // 释放应用程序为传递文件名而开辟的内存空间
- DragFinish( HDROP(msg.WParam) );
- }