如何实现拖动文件

如何实现拖动文件在基于对话框的程序中,默认是没有这个消息的。

1、按下Ctrl+W,弹出类向导对话框,选择Class Info标签;

2、在Message fileter下拉列表中选择Window,然后再点击Message Maps标签;

 3、这时就出现WM_DROPFILES消息了,添加该消息的响应函数。

//拖放文件响应void CXXXXX::OnDropFiles(HDROP hDrop)

{

       CString strPath;UINT nChars=::DragQueryFile(hDrop,0,NULL,0);

      TCHAR* lpszFileName=new TCHAR[nChars+1];

       nChars=::DragQueryFile(hDrop,0,lpszFileName,nChars+1);

      ::DragFinish(hDrop);CString str(lpszFileName);

      AfxMessageBox(str);

      delete []lpszFileName;

}

在 Qt 中,我们可以使用 `QDrag` 和 `QMimeData` 类来实现拖拽文件的功能。 首先,我们需要在窗口上设置拖拽事件的接受器。在窗口类的构造函数中添加以下代码: ```cpp setAcceptDrops(true); ``` 接着,我们需要实现拖拽事件的处理函数。在窗口类中添加以下代码: ```cpp void MyWindow::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasUrls()) event->acceptProposedAction(); } void MyWindow::dropEvent(QDropEvent *event) { foreach (const QUrl &url, event->mimeData()->urls()) { QString fileName = url.toLocalFile(); // 处理文件名 } } ``` 在 `dragEnterEvent` 函数中,我们判断拖拽的数据中是否包含 URL,如果包含,则接受拖拽事件。在 `dropEvent` 函数中,我们获取拖拽的文件名,并进行处理。 最后,我们需要在程序中添加拖拽的起始点。在需要启动拖拽的控件类中添加以下代码: ```cpp void MyWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; mimeData->setUrls(/* 文件 URL 列表 */); drag->setMimeData(mimeData); drag->exec(); } } ``` 在 `mousePressEvent` 函数中,我们创建 `QDrag` 对象,并设置拖拽的数据为文件 URL 列表,然后启动拖拽操作。 注意:在启动拖拽操作后,程序会进入拖拽循环,直到拖拽完成或取消。如果需要在拖拽过程中做一些操作,可以在拖拽循环中添加代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值