当前位置: 首页 > article >正文

MFC给编辑框(Edit)控件增加文件拖入的支持

类似文章也有很多,本文原始代码也是来自网络的整理。实测功能正常。

下面提供源码,使用说明包含在源码的头文件里。额外说明下,这个源码目前只支持单个文件的拖入,如果需要多文件同时拖入,要自行改造。这里提供的是仅编辑框(Edit)控件接受文件拖入,而不是整个窗口去接受文件拖入。

//这是.h代码

#pragma once
/*
前置说明:程序最好拥有管理远权限,不然可能有些路径文件不能拖入吧
1.在dlg.h里面添加#include "dropedit.h"
2.在界面编辑器里面给edit添加控件变量,变量类型就是CDropEdit
3.给edit控件属性AcceptFiles设置为TRUE
4.在dlg.cpp里面OnInitDialog函数中添加
	AllowMeesageForVistaAbove(SPI_SETANIMATION, MSGFLT_ADD);
	AllowMeesageForVistaAbove(WM_DROPFILES, MSGFLT_ADD);
  两个方法
*/
#include "afxwin.h"

BOOL AllowMeesageForVistaAbove(UINT uMessageID, BOOL bAllow);

class CDropEdit :
	public CEdit
{
public:
	CDropEdit(void);
	~CDropEdit(void);
	DECLARE_MESSAGE_MAP()
	afx_msg void OnDropFiles(HDROP hDropInfo);
};
/这是cpp代码

#include "StdAfx.h"
#include "DropEdit.h"

BOOL AllowMeesageForVistaAbove(UINT uMessageID, BOOL bAllow)
{
	BOOL bResult = FALSE;
	HMODULE hUserMod = NULL;
	//vista and later
	hUserMod = LoadLibrary(_T("user32.dll"));
	if( NULL == hUserMod )
	{
		return FALSE;
	}

	typedef BOOL(WINAPI *_ChangeWindowMessageFilter)(UINT, DWORD);
	_ChangeWindowMessageFilter pChangeWindowMessageFilter =	(_ChangeWindowMessageFilter)GetProcAddress( hUserMod, "ChangeWindowMessageFilter");
	if( NULL == pChangeWindowMessageFilter )
	{
		return FALSE;
	}
	bResult = pChangeWindowMessageFilter( uMessageID, bAllow ? 1 : 2 );//MSGFLT_ADD: 1, MSGFLT_REMOVE: 2

	if( NULL != hUserMod )
	{
		FreeLibrary( hUserMod );
	}

	return bResult;
}

CDropEdit::CDropEdit(void)
{
}

CDropEdit::~CDropEdit(void)
{
}
BEGIN_MESSAGE_MAP(CDropEdit, CEdit)
	ON_WM_DROPFILES()
END_MESSAGE_MAP()

void CDropEdit::OnDropFiles(HDROP hDropInfo)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if (hDropInfo)
	{
		int nDrag; //拖拽文件的数量
		nDrag = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
		if (nDrag == 1)
		{
			// 被拖拽的文件的文件名
			TCHAR Path[MAX_PATH + 1] = { 0 };
			// 得到被拖拽的文件名
			DragQueryFile(hDropInfo, 0, Path, MAX_PATH);
			// 把文件名显示出来
			SetWindowText(Path);
			DragFinish(hDropInfo);
		}
		else
		{
			MessageBox(_T("只能拖拽一个文件!"));
		}
	}
	CEdit::OnDropFiles(hDropInfo);
}

上述.h里面也说了,引入后添加控件变量,需要在OnInitDialog里面添加消息允许之类的。参照着来就行。


http://www.kler.cn/a/350151.html

相关文章:

  • 快速入门Flink
  • 62,【2】 BUUCTF WEB [强网杯 2019]Upload1
  • Swift语言的学习路线
  • Golang Gin系列-4:Gin Framework入门教程
  • 解决后端接口返回Long类型参数导致的精度丢失问题
  • 内存 管理
  • LabVIEW离心泵监测系统
  • 如何使用ssm实现超市管理系统
  • C语言[函数调用数据传输]
  • itertools.chain() 函数详解
  • 从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络
  • 《鸟哥的Linux私房菜基础篇》---2 Linux的档案与目录
  • C++一个很好的计时方法
  • 益安宁丸,国药准字,值得信赖
  • 猜数字小游戏
  • 【网络安全】未加密的F5 BIG-IP Cookie存在严重漏洞将被攻击者利用
  • 3dsMax添加天空盒
  • Flythings学习(四)串口通信
  • React Query 和 React Context
  • 生物特征验证的原理及使用例子
  • 软件测试工作中-商城类项目所遇bug点
  • 第十三章 RabbitMQ之消息幂等性
  • 端到端的开源OCR模型:GOT-OCR-2.0,支持场景文本、文档、乐谱、图表、数学公式等内容识别!
  • Vue 多次尝试请求ajax
  • QT--Qlabel学习、获取文本和设置文本、文本对齐方式、文本换行、显示图片
  • 【音频生成】mac安装ffmpeg