丿小白丶 2023-01-10 19:50 采纳率: 0%
浏览 17

MFC中托文件到指定控件并显示文件名

本人是一个刚学编程的,我想在MFC中实现拖入第一个文件到一个EDIT中并显示文件名称,再拖入第二个文件到第二个EDIT中显示文件名要怎么做呢?就是拖入文件到指定EDIT控件中并显示该文件的文件名

  • 写回答

1条回答 默认 最新

  • m0_54204465 2023-01-10 20:20
    关注

    实现拖拽文件到 MFC 程序中的控件并显示文件名称,需要使用一些 MFC 的拖拽 API 。

    首先,你需要为你的窗口类添加支持拖拽操作的功能,这可以通过在窗口类的消息映射中添加一个消息处理函数来实现。如果你想支持文件拖拽,那么你需要处理 WM_DROPFILES 消息。示例代码如下:

    void CMyDlg::OnDropFiles(HDROP hDropInfo) 
    {
        TCHAR szFileName[MAX_PATH];
        UINT nNumFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
        for (UINT i = 0; i < nNumFiles; i++)
        {
            DragQueryFile(hDropInfo, i, szFileName, MAX_PATH);
            //szFileName 即为文件名称
        }
        DragFinish(hDropInfo);
    }
    
    

    接着,你需要为你的编辑框控件(CEdit)设置其可以接收拖拽操作。这可以通过设置控件的属性来实现,在 Visual Studio 的资源视图中找到你的编辑框,右键点击,在属性中找到 "DragAcceptFiles",将其设置为 "True"。

    最后,在代码中添加文件名称到对应的编辑框中,可以使用 CEdit 的 SetWindowText 函数。

    CEdit* pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
    pEdit1->SetWindowText(szFileName);
    
    

    当然, 你可以设置变量来存储文件名,然后再把文件名称显示到对应的编辑框中。

    需要注意的是,上面的代码仅仅能够实现一个文件拖拽到一个编辑框中并显示文件名。如果你想要支持多个文件拖拽到多个编辑框中,需要在代码中进行判断和处理。

    如果你希望每次拖拽文件显示在不同的编辑框中,那么你需要在循环中依次把文件名设置到每一个编辑框中,并在循环里进行判断。如果你希望所有文件名称都显示在同一个编辑框中,那么你可以在循环中对文件名进行拼接,最后设置到编辑框中。

    可以使用 CString 类来拼接字符串

    CString strAllFileName;
    for (UINT i = 0; i < nNumFiles; i++)
    {
        DragQueryFile(hDropInfo, i, szFileName, MAX_PATH);
        strAllFileName += szFileName;
        strAllFileName += _T("\r\n");
    }
    CEdit* pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
    pEdit1->SetWindowText(strAllFileName);
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月10日