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

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

建立一个对话框工程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

原文地址:https://www.cnblogs.com/ccmfc/p/1822935.html