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
implementfrom
CEdit
,并处理了
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