Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1530793
  • 博文数量: 226
  • 博客积分: 3997
  • 博客等级: 少校
  • 技术积分: 2369
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-19 17:26
个人简介

Never save something for a special occasion. Every day in your life is a special occasion.

文章分类

全部博文(226)

文章存档

2018年(5)

2017年(11)

2016年(1)

2015年(17)

2014年(14)

2013年(30)

2012年(5)

2011年(52)

2010年(107)

分类: C/C++

2011-01-19 23:51:05

很多的应用程序都支持拖放文件,比如 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);
}


阅读(1657) | 评论(0) | 转发(0) |
0

上一篇:文件操作

下一篇:HT-MCU 混合语言

给主人留下些什么吧!~~