网上的拿来主义只适用于Dialog有一个Edit控件的场合。多个Edit控件就没办法了(像下面这种小窗口,有两个编辑框的,就没有),所以特别写一下多个Edit如何实现拖放文件
这里以VS2017为例,其他版本的VS大同小异
单个Edit控件可以由CDialog传消息,多个Edit就只能由Edit本身来响应了。所以要重载Edit控件。
先要设置Edit控件可以接受文件拖放,如下图
然后到资源视图里,右键点对话框,添加类,如下图
选添加MFC类
输入类名文件吗,基类当然是CEdit
再回到刚才类向导,选择WM_DROPFILES,添加处理程序
不用理会最下面的说明,是错的。什么时候微软也用google翻译了。。。。。
到我们刚才建立的CMyDropEdit.cpp文件里,OnDropFiles函数已经有了
//CMyDropEdit.cpp文件
void CMyDropEdit::OnDropFiles(HDROP hDropInfo)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
WORD wNumFiles = DragQueryFile(hDropInfo, -1, NULL, 0);
CString fileText = _T("");
TCHAR path[MAX_PATH + 1] = { 0 };
//获取拖放文件路径
WORD wPathnameSize = DragQueryFile(hDropInfo, 0, path, MAX_PATH);
DragFinish(hDropInfo);
//读取文件内容
FILE* fp = NULL;
fp = _tfopen(path, _T("rb"));
DWORD dwRead = 0;
while ((dwRead = fread(path, 1, MAX_PATH, fp)) != 0)
{
path[dwRead] = 0;
fileText += path;
}
//设定读出的文件内容到文本框
SetWindowText(fileText);
//CEdit::OnDropFiles(hDropInfo);
}
添加控件定义
//CxxxDlg.h文件
.....
#include "CMyDropEdit.h"
.....
CMyDropEdit m_myDropEdit1;
CMyDropEdit m_myDropEdit2;
然后要将控件进行绑定
//CxxxDlg.cpp 文件
.....
DDX_Control(pDX, IDC_EDIT1, m_myDropEdit1);
DDX_Control(pDX, IDC_EDIT2, m_myDropEdit2);
这样就大功告成了,可以向2个edit拖放不同的文件,然后显示内容