大家帮忙解决下这个关于MFC的拖拽文件问题

大家帮忙解决下这个关于MFC的拖拽文件问题,第1张

试一下是不是这个原因:

要让控件能够接受文件拖拽,还需要设置属性。在控件上点击右键,选择Properties->Extended Styles,点选Accept files选项

另外看下控件变量是control类型的,还是value类型的。(我想你既然是从基类继承过来的应该是control)control类型的才对.

重载:

DragAcceptFiles()

添加消息:

ON_WM_DROPFILES()

将你的dialog属性accept file  设置为true

填写重载函数

void CdragfileDlg::OnDropFiles( HDROP hDropInfo )

{

//MessageBox(_T("ok"))

TCHAR        szFileName[255]

::ZeroMemory(szFileName,255)

::DragQueryFile(hDropInfo,0,szFileName,254)

if(lstrlen(szFileName)!=0)

{

SetDlgItemText(IDC_EDIT1,szFileName)

m_strFilePath=szFileName

}

::DragFinish(hDropInfo)

}

如果是针对某一控件的话 有两种方法

重写控件函数 稍微有点麻烦

直接在函数中判断添加即可

把对话框设置了Accept Files属性,创天中文VC 汉化后是 接受文件 属性

,就可以添加WM_DROPFILES消息的响应函数OnDropFiles了。

ClassWizard默认不支持该消息函数,所以需要手动添加此函数,然后在该函数中调用上述的三个API函数

要想让ClassWizard能支持WM_DROPFILES消息,方法如下:

在VC中按 Ctrl+W 呼出 MFC ClassWizard,然后到 Class info 页面的最下方

Message filter 的下拉列表中选择 Window,默认是 Dialog,然后回到 Message Maps 里 选择 你的 对话框类 ,右边就能找到WM_DROPFILES消息了,双击添加就好了。

其代码如下:

void DragDemo::OnDropFiles(HDROP hDrop)

{

// 定义一个缓冲区来存放读取的文件名信息

char szFileName[MAX_PATH + 1] = {0}

// 通过设置iFiles参数为0xFFFFFFFF,可以取得当前拖动的文件数量,

// 当设置为0xFFFFFFFF,函数间忽略后面连个参数。

UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0)

// 通过循环依次取得拖动文件的File Name信息,并把它添加到ListBox中

for(UINT i=0i<nFilesi++)

{

DragQueryFile(hDrop, i, szFileName, MAX_PATH)

m_list.AddString(szFileName)//文本控件变量

}

// 结束此次拖拽 *** 作,并释放分配的资源

DragFinish(hDrop)

}

你可以参考上面的方法

其实 edit 控件也处理 拖拽 消息 ,但是你必须 对 Cedit 类 扩展,让其支持WM_DROPFILES消息,因为 Cedit类 也是继承CWnd类

详细看

CWnd::DragAcceptFiles

void DragAcceptFiles( BOOL bAccept = TRUE )

参数: bAccept 指明是否接收拖放文件的标志。

说明:

使用CWnd指针,在应用程序的CWinApp::InitInstance函数中,在一个窗口的内部调用这个成员函数,以指明你的主窗口和所有的子窗口是否接收从Windows的文件管理器拖放的文件。

只有将bAccept参数设为TRUE并调用了DragAcceptFiles函数的窗口才将它标识为能够处理Windows的WM_DROPFILES消息。例如,在MDI应用程序中,如果在调用DragAcceptFiles函数的时候使用了CMDIFrameWnd窗口指针,则只有CMDIFrameWnd窗口得到WM_DROPFILES消息。这个消息将不会被发送到所有打开的CMDIChildWnd窗口。要使CMDIChildWnd窗口能够接收这个消息,你必须用CMDIChildWnd指针调用DragAcceptFiles函数。

要终止接收拖放文件,则调用这个成员函数并令bAccept等于FALSE。

请参阅:::DragAcceptFiles, WM_DROPFILES


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12042373.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存