很多的应用程序都支持拖放文件,比如 Word、realone 等。
在BCB中实现拖放功能,需要3步:
Step1:
在OnFormCreate()中用DragAcceptFiles(Handle, true)通知系统,程序接受文件拖放。
其中 第一个参数Handle是拖动文件的窗口句柄;第二个参数是true表示窗口接受拖放文件。
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
// 允许接受拖放文件
DragAcceptFiles(Handle, true);
}
Step2:
截取系统WM_DRAGFILES消息,指定处理此消息的函数。
在主窗体的头文件中加入如下内容
void virtual __fastcall MyDropFileFunction(TWMDropFiles & Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, MyDropFileFunction);
END_MESSAGE_MAP(TForm);
Step3:
编写函数处理文件拖放
void __fastcall TMainForm::MyDropFileFunction(TWMDropFiles & Msg)
{
// 从Msg消息中得到文件数目
int NumOfFiles = DragQueryFile((HDROP)Msg.Drop, 0xffffffff, NULL, 0);
for(int i=0; i {
// 从Msg消息中得到文件路径
String NameOfFile;
NameOfFile.SetLength(MAX_PATH);
int Length = DragQueryFile((HDROP)Msg.Drop, i,
NameOfFile.c_str(), NameOfFile.Length());
NameOfFile.SetLength = Length;
// 从路径中截取扩展名
String NameOfExt;
NameOfExt = NameOfFile.LowerCase().SubString(
NameOfFile.Length()-3, 4);
if(NameOfExt == ".txt")
{
// 创建子窗体打开文件
CreateMDIChild(AnsiString(NameOfFile));
}
}
// 释放拖放文件消息占用的内存资源
DragFinish((HDROP)Msg.Drop);
}
阅读(1648) | 评论(0) | 转发(0) |