如何在mfc中实现打开一个文件,获取文件名

如何在mfc中实现打开一个文件,获取文件名,第1张

这个满足你的要求s返回文件路径#defineDLG_FILTER"ALLFiles(*.*)|*.*||"#defineDLG_EXT"*"CFileDialogdlg(TRUE,_T(DLG_EXT),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,_T(DLG_FILTER))if(dlg.DoModal()==IDOK){POSITIONpos=dlg.GetStartPosition()while(pos!=0){CStrings=dlg.GetNextPathName(pos)}}下面代码,可以选择文件夹,会返回文件夹的路径需要自己查找每个文件char*GetPath(HWNDhWnd,char*pBuffer){BROWSEINFObfLPITEMIDLISTlpitemmemset(&bf,0,sizeofBROWSEINFO)bf.hwndOwner=hWndbf.lpsztitle="选择路径"bf.ulFlags=BIF_RETURNONLYFSDIRS//属性你可自己选择lpitem=SHBrowseForFolder(&bf)if(lpitem==NULL)//如果没有选择路径则返回0return0//如果选择了路径则复制路径,返回路径长度SHGetPathFromIDList(lpitem,pBuffer)returnpBuffer}

int __stdcall CDirDialog::BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)

{

     //bInfo.lParam = (LPARAM)this这行代码将CDirDialog对象通过lpData传入到回调函数BrowseCtrlCallback

     CDirDialog* pDirDialogObj = (CDirDialog*)lpData

     //浏览目录对话框已初始化完成后会回调BrowseCtrlCallback,uMsg等于BFFM_INITIALIZED

     if (uMsg == BFFM_INITIALIZED )

     {

         //如果指定了默认目录,给hwnd(浏览目录对话框)发送BFFM_SETSELECTION消息,用于自动选中该默认目录

         if( ! pDirDialogObj->m_strSelDir.IsEmpty() )

             ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)(LPCTSTR)(pDirDialogObj->m_strSelDir))

         //如果CDirDialog的m_strWindowTitle不是空字符串,那么将浏览目录对话框的窗口标题设置为m_strWindowTitle

         if( ! pDirDialogObj->m_strWindowTitle.IsEmpty() )

             ::SetWindowText(hwnd, (LPCTSTR) pDirDialogObj->m_strWindowTitle)

     }

     //浏览目录的对话框内用户选择的目录变化时,回调BrowseCtrlCallback,uMsg等于BFFM_SELCHANGED

     else if( uMsg == BFFM_SELCHANGED )

     {

         //BFFM_SELCHANGED消息中,lpData 指向新选择的目录的PIDL

         LPITEMIDLIST pidl = (LPITEMIDLIST) lParam

         char selection[MAX_PATH]

         //调用SHGetPathFromIDList从PIDL转换为文件系统路径字符串

         if( ! ::SHGetPathFromIDList(pidl, selection) )

             selection[0] = '\0'

         CString csStatusText

         //调用SelChanged函数,由CDirDialog或其派生类重载的SelChanged函数来决定是否允许选择该目录

         BOOL bOk = pDirDialogObj->SelChanged(selection, csStatusText)

         if( pDirDialogObj->m_bStatus )

            //修改浏览目录的对话框的状态栏内容为新选择的目录路径

             ::SendMessage(hwnd, BFFM_SETSTATUSTEXT , 0, (LPARAM)(LPCSTR)csStatusText)

         //如果SelChanged返回TRUE,表示允许选择该目录,于是启用"确定"按钮,否则禁用。

         ::SendMessage(hwnd, BFFM_ENABLEOK, 0, bOk)

     }

   return 0

}

你这么写肯定不对的

if(filedlg.DoModal()==IDOK)

{

CString fileName=filedlg.GetFileName()

m_FileName=fileName

UpdateData(FALSE)

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存