让MFC的列表框List Control支持拖放文件导入数据

让MFC的列表框List Control支持拖放文件导入数据-可达鸭小栈
让MFC的列表框List Control支持拖放文件导入数据
此内容为付费资源,请付费后查看
20积分
积分资源免费
付费资源可享->
免费更新
协助部署
在线答疑
积分获得方式登录签到即可获得
付费资源
智谱
AI 正在加载摘要

源码介绍

C++写的一个拖动类,可以实现绑定List Control 或Edit等控件 实现拖动文件到空间读取路径功能

使用例子

首先将类文件.h .cpp文件添加到项目 然后创建一个List Control控件并为该控件添加一个变量m_List

然后在Dlg.cpp中申明一个全局类实例 DragClass _dr{};

然后需要写一个函数 调整一下list列表的样式代码如下

void SetListToForm(CListCtrl* listPtr, bool isCheck=false)
{
	LONG_PTR lStyle;//超级列表框风格
	lStyle = GetWindowLongPtr(listPtr->m_hWnd, GWL_STYLE);//获取当前风格
	lStyle |= LVS_REPORT;//设置成报表格式;
	SetWindowLongPtr(listPtr->m_hWnd, GWL_STYLE, lStyle);//设置样式
	DWORD dStyle = listPtr->GetExtendedStyle();
	dStyle |= LVS_EX_FULLROWSELECT;//整行选择;
	dStyle |= LVS_EX_GRIDLINES;//整列选择;
	listPtr->SetExtendedStyle(dStyle);
	if (isCheck)listPtr->SetExtendedStyle(LVS_EX_CHECKBOXES);//设置复选框   listptr.getcheck() 可以获取选中状态
}

在外部定义一个回调函数用来接收拖放的文件信息

LRESULT CALLBACK Fdrag1(
	HWND hwnd,        // handle to window
	UINT uMsg,        // message identifier
	WPARAM wParam,    // first message parameter
	LPARAM lParam)
{
	if (uMsg == WM_DROPFILES)
	{
		char Pbuff[MAX_PATH]{};
		int num = ::DragQueryFileA((HDROP)wParam, -1, Pbuff, MAX_PATH);
		CString path;
		// 获取所有接收到的目录 换行符分割;
		for (int i = 0; i < num; i++)
		{
			::DragQueryFileA((HDROP)wParam, i, Pbuff, MAX_PATH);
			if (i > 0)
			{
				path += "\r\n";
			}
			path += Pbuff;
		}
		DragFinish((HDROP)wParam);
		AfxMessageBox("得到的路径信息" + path);
		return 0;
	}
	return CallWindowProcA((WNDPROC)_dr.oldPtr, hwnd, uMsg, wParam, lParam);
}

然后在OnInitDialog初始化函数中 添加以下两行代码

SetListToForm(&m_List);
_dr.RegControl(m_List.m_hWnd, Fdrag1);//绑定拖放类 fdrag1是一个回调函数 

图片[1]-让MFC的列表框List Control支持拖放文件导入数据-可达鸭小栈

上述步骤都操作完之后 运行程序 拖入文件到列表框内松开即可验证是否成功

图片[2]-让MFC的列表框List Control支持拖放文件导入数据-可达鸭小栈

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
看完了?看完了愣着啊点赞干什么
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容