Mfc 拖动查询文件可以';无法获取文件路径
我的代码:Mfc 拖动查询文件可以';无法获取文件路径,mfc,cedit,Mfc,Cedit,我的代码: void CWGAccountFilterDlg::OnDropFiles(HDROP hDropInfo) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnDropFiles(hDropInfo); wchar_t lpFilePath[MAX_PATH] = { 0 }; int nCount = DragQueryFile(hDropInfo, -1, NULL, 0); DragQueryFil
void CWGAccountFilterDlg::OnDropFiles(HDROP hDropInfo)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnDropFiles(hDropInfo);
wchar_t lpFilePath[MAX_PATH] = { 0 };
int nCount = DragQueryFile(hDropInfo, -1, NULL, 0);
DragQueryFile(hDropInfo, nCount, lpFilePath, _countof(lpFilePath));
DragFinish(hDropInfo);
GetDlgItem(IDC_EDIT_FILE)->SetWindowText(lpFilePath);
m_FilePath.Format(L"%s", lpFilePath);
}
第二次调用DragQueryFile
返回0(这种情况是正确的),并且lpFilePath
(这不是预期的)中没有数据。我确信nCount
值是有效的,没有缓冲区溢出
对话框和CEdit控件都将“接受文件”设置为true。还有一个名为CMyEdit
implementfromCEdit
,并处理了OnDropFiles
函数的类。来自以下文档:
要查询的文件的索引。如果此参数的值为
0xFFFFFF,DragQueryFile返回已删除文件的计数。如果
此参数的值介于零和文件总数之间
DragQueryFile将文件名与相应的
lpszFile参数指向的缓冲区的值
在对DragQueryFile
的第二次调用中,第二个参数应介于0
和nCount
之间。测试nCount
的值以确保它大于零,如果您只对第一个文件感兴趣,则通过零
这假定只删除一个文件。如果有更多文件,则添加循环
int nCount = DragQueryFile(hDropInfo, -1, NULL, 0);
if (nCount > 0)
{
//(add a loop to get multiple files)
DragQueryFile(hDropInfo, 0, lpFilePath, _countof(lpFilePath));
GetDlgItem(IDC_EDIT_FILE)->SetWindowText(lpFilePath);
m_FilePath.Format(L"%s", lpFilePath);
}
DragFinish(hDropInfo);
你救了我,谢谢。@Barmak Shemirani