博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

对话框(dialog)中文件的拖放

Posted on 2010-09-10 08:51  ccmfc  阅读(310)  评论(0编辑  收藏  举报

在对话框中类向导没有像单文档中那样提供了拖放事件(在类向导中找不到自己写了^_^)

 

建立一个对话框工程FileOffer

 

第一步:

在CFileOffer类中添加两个事件

afx_msg int  OnCreate(LPCREATESTRUCT lpCreateStruct);

afx_msg void OnDropFiles(HDROP hDropInfo);

 

第二步:

在FileOfferDlg.cpp中添加

BEGIN_MESSAGE_MAP(CPlayTestDlg, CDialog)
 //{{AFX_MSG_MAP(CPlayTestDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()

//添加响应消息

ON_WM_CREATE()

ON_WM_DROPFILES()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

 

第三步:

int CFileOfferDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

  DragAcceptFiles(TRUE);

  return 0;

}

 

void CFileOfferDlg::OnDropFiles(HDROP hDropInfo)

{

  char *pFilePath;

  int iFileNum;

  int iReturnByte;

  //得到拖放的文件数目

  iFileNum = ::DragQueryFiles(hDropInfo, -1, NULL, 0);

  

  for(int i=0; i<iFileNum; i++)

  {

    iReturnByte = DragQueryFile(hDropInfo, i, NULL, 0);         //返回文件字节数

    HANDLE hHeap = GetProcessHeap();

    pFilePath = (char *)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, iByte);

    if(pFilePath == NULL)

    {

        AfxMessageBox("分配内存不成功");

         exit(-1);

    }

    DragQueryFile(hDropInfo, i, pFilePath, piReturnByte+1);

    

    AfxMessageBox(pFilePath);

    ::HeapFree(hDropInfo, HEAP_ZERO_MEMORY, pFilePath);

  }

 

  DragFinish(hDropInfo);

}

 

 

三步到位OK