为什么编辑框不响应OnDropFiles?

weixin_44690344 2019-06-25 04:06:36
mfc,vs2015建立一个基于对话框的程序,在对话框上放一个编辑框和一个列表框,两个的Acccept Files都设置为True,在类向导中添加WM_DROPFILES消息响应函数OnDropFiles,那么在运行时,向列表框拖文件时,可以响应OnDropFiles函数,而向编辑框拖文件时却不响应,请问怎么做才能让编辑框也响应OnDropFiles函数?谢谢!
...全文
439 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
灰龙001 2021-09-16
  • 打赏
  • 举报
回复

可以尝试建立一个类CDropEdit 继承至 CEdit。本人vs2010亲测是没问题的,我想2015也是可以的。
只需要那个编辑器关联一个实例CDropEdit就可以

img

class CDropEdit : public CEdit
{
public:
CDropEdit(void);
~CDropEdit(void);

afx_msg void OnDropFiles(HDROP hDropInfo);
DECLARE_MESSAGE_MAP()

};

#include "stdafx.h"
#include "DropEdit.h"

BEGIN_MESSAGE_MAP(CDropEdit, CEdit)
//{{AFX_MSG_MAP(CEncryptToolDlg)
//}}AFX_MSG_MAP
ON_WM_DROPFILES()
END_MESSAGE_MAP()

CDropEdit::CDropEdit(void)
{
}

CDropEdit::~CDropEdit(void)
{
}

void CDropEdit::OnDropFiles(HDROP hDropInfo)
{
// TODO: Add your message handler code here and/or call default

char szTmp[256];
CString strVal;
unsigned int nRet = 0, nInx = 0;
do {
    nRet = ::DragQueryFile(hDropInfo, nInx++, szTmp, sizeof(szTmp));
    if ( nRet>0) {
        strVal += szTmp;
    } else {
    }
        break;
} while (1);
::DragFinish(hDropInfo);
SetWindowText(strVal);

CEdit::OnDropFiles(hDropInfo);

}

weixin_44690344 2019-07-13
  • 打赏
  • 举报
回复
引用 4 楼 zjq9931的回复:
你是想响应WM_DROPFILES消息?
是的,现在向编辑框拖文件时,不响应这个消息!
  • 打赏
  • 举报
回复
引用 5 楼 weixin_44690344 的回复:
[quote=引用 4 楼 zjq9931的回复:]你是想响应WM_DROPFILES消息?
是的,现在向编辑框拖文件时,不响应这个消息![/quote] vs2015没有装,似乎vs2008开始就没有类向导了。这个消息不能很直接的添加。有点绕 你添加这个消息是怎么添加的? 我在vs2008里面是通过属性窗口添加的。 我做的可以。
  • 打赏
  • 举报
回复
你是想响应WM_DROPFILES消息?
schlafenhamster 2019-06-25
  • 打赏
  • 举报
回复
拖动 时 DROPEFFECT 是 什么 ?
weixin_44690344 2019-06-25
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster的回复:
afx_msg void OnDropFiles(HDROP hDropInfo);

ON_WM_DROPFILES()

void CMoveEdit::OnDropFiles(HDROP hDropInfo)
{
TCHAR lpszFile[MAX_PATH + 1];
int numFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL,0);
afxDump << numFiles << "\n";// =1
for(int idx=0;idx < numFiles;idx++)
{
DragQueryFile(hDropInfo, idx, lpszFile, MAX_PATH);
SetSel(-1,-1);
ReplaceSel(lpszFile);
SetSel(-1,-1);
ReplaceSel("\r\n");
}
DragFinish(hDropInfo);
}
向列表框拖文件时可以进这个函数,向编辑框拖文件时根本不进(响应)这个函数,我想问的是向编辑框拖文件时怎么才能响应这个函数,所以函数里面的代码写什么,应该不重要吧?
schlafenhamster 2019-06-25
  • 打赏
  • 举报
回复
afx_msg void OnDropFiles(HDROP hDropInfo);

ON_WM_DROPFILES()

void CMoveEdit::OnDropFiles(HDROP hDropInfo)
{
TCHAR lpszFile[MAX_PATH + 1];
int numFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL,0);
afxDump << numFiles << "\n";// =1
for(int idx=0;idx < numFiles;idx++)
{
DragQueryFile(hDropInfo, idx, lpszFile, MAX_PATH);
SetSel(-1,-1);
ReplaceSel(lpszFile);
SetSel(-1,-1);
ReplaceSel("\r\n");
}
DragFinish(hDropInfo);
}

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧