vs2010及以上版本的编辑框CEdit支持拖拽OnDropFiles

今天使用以前做的工具时,要想把某些文件路径加入编辑框中很麻烦。决定优化一下,能支持把文件拖拽到编辑控件中,这样非常便捷了。省去了输入路径或用浏览框选文件麻烦!

在网上找了一些资料并已解决,决定加以整理分享一下自己的经验。同时感谢网上大拿无私的分享!!

1、首先生成支持拖拽的编辑框类CDropEdit。因为如果对话框中有多个编辑框的话,用对话框响应拖拽消息的话,就无法识别当前文件拖拽到的是什么控件,所以要用专门的类来响应消息就避免了这个问题。

DropEdit.h文件内容如下: 

#pragma once
#include "afxwin.h"

// 支持文件拖拽的便捷框类
class CDropEdit : public CEdit
{
public:
    CDropEdit(void);
    ~CDropEdit(void);

    afx_msg void OnDropFiles(HDROP hDropInfo);
    DECLARE_MESSAGE_MAP()
};

DropEdit.cpp文件内容如下:

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


BEGIN_MESSAGE_MAP(CDropEdit, CEdit)
    //{{AFX_MSG_MAP(CDropEdit)
    //}}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;

    // 通过while循环取出拖拽的文件路径,这里我取一个所以直接break
    do {
        nRet = ::DragQueryFile(hDropInfo, nInx++, szTmp, sizeof(szTmp));
        if ( nRet>0) {
            strVal += szTmp;
        } else {
        }
        break;
    } while (1);
    ::DragFinish(hDropInfo);
    SetWindowText(strVal);

    CEdit::OnDropFiles(hDropInfo);
}

2、设置支持拖拽的编辑框的属性:Accpet Files 为True。如下图

 

 3、在类向导中添加成员变量,如图

 4、修改向导生成的成员变量的类型CEdit为CDropEdit。

然后编译运行,一切正常。

最后其他需要支持拖拽的控件都可以采用类扩展和继承方式实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值