首先要修改窗口属性,允许拖拽文件到这个窗口里面,窗口需要有 WS_EX_ACCEPTFILES 属性。
使用 GetWindowLongPtr 获取当前属性,使用 SetWindowLongPtr 设定新的属性。
在 Unit1.cpp 原有的构造函数 TForm1::TForm1() 里面添加代码:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
LONG_PTR exst = ::GetWindowLongPtr(Handle, GWL_EXSTYLE);
::SetWindowLongPtr(Handle, GWL_EXSTYLE, exst|WS_EX_ACCEPTFILES);
} |
有 WS_EX_ACCEPTFILES 属性的窗口,会接受拖放文件,收到 WM_DROPFILES 消息,程序需要处理这个消息。
在 Unit1.h 的 class TForm1 类里面添加 protected 成员函数 WndProc:
protected:
void __fastcall WndProc(Winapi::Messages::TMessage &Message); |
处理 WM_DROPFILES 消息:
在 Form 上放一个 TMemo 控件 Memo1,
在 Unit1.cpp 里面添加 WndProc 函数的实现,把拖放进来的文件名显示在 Memo1 里面。
void __fastcall TForm1::WndProc(Winapi::Messages::TMessage &Message)
{
if(Message.Msg==WM_DROPFILES)
{
UnicodeString s;
TCHAR szPath[_MAX_PATH];
HDROP hDrop = (HDROP)Message.WParam;
UINT uCount = ::DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
if(uCount>0)
{
s.cat_sprintf(L"拖拽进来 %u 个文件\r\n", uCount);
for(UINT uIndex = 0; uIndex<uCount; uIndex++)
{
::DragQueryFile(hDrop, uIndex, szPath, _MAX_PATH);
s.cat_sprintf(L"第 %u 个文件:\"%s\"\r\n", uIndex+1, szPath);
}
}
::DragFinish(hDrop);
Memo1->Lines->Add(s);
}
TForm::WndProc(Message);
} |
相关链接:把其他程序(网页或文字编辑等)里面的文字拖拽到 Memo 编辑框里面
|