C++ MFC获取文件名字(包括后缀名)以下做法是否正确?

voidCMultiView3DView::OnButtonopen()//在菜单条上设置一个按钮,与该函数关联{CFileDialogfileDlg(TRUE);fil... void CMultiView3DView::OnButtonopen()//在菜单条上设置一个按钮,与该函数关联 {
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="打开";
fileDlg.m_ofn.lpstrFilter="3D Studio 模型(*.3ds)";
if(IDOK==fileDlg.DoModal())
{
file_name = new char[strlen(fileDlg.GetFileName())+1];//网上说GetFileName()可以获取文件名+后缀名,其中file_name是 CMultiView3DView类里的public成员变量char* file_name
strcpy(file_name, fileDlg.GetFileName());
}
}

char* CMultiView3DView::getname(){ OnButtonopen();
return file_name;
}//getname函数返回函数名

整个工程没有报错,是不是因为按钮关联有问题,谢谢!
展开
 我来答
金色潜鸟
推荐于2017-12-16 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5712万
展开全部
GetFileName 只获取文件名。
如果要得到包含全路径的文件名要用 GetPathName
另外你想把文件名传出来(供别的函数用),file_name 应当放在 .h 文件里,可以在初始化时开单元。

我的一个程序取文件名用下面方法,通过实参传递:
void CStripDoc::Get_Dac_Filename(CString *name)
{
CString str;
char BASED_CODE filters[] = "DAC file (*.dac)|*.dac||";
CWnd* parentWnd;
parentWnd=parentWnd->GetActiveWindow();
CFileDialog openDlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,filters,parentWnd);
if(openDlg.DoModal()==IDOK)
{
*name = openDlg.GetPathName();
}
}
更多追问追答
追问
我不需要得到该文件的路径 只需名字就可以了 我那个方法有问题么 如果方便是否可以加QQ问问 因为弄了好久都没弄出来。。。
追答
file_name = new ...  这是动态分配。
openDlg.GetPathName , openDlg.GetFileName 返回 CString,不是 char, 不可用 strcpy(。。),还有 。。。节约时间吧:
改用GetFileName,*.3ds, 其它, 例如构建fileDlg 等,模仿我的写法,即可。
龚炜林
2013-01-04 · TA获得超过1560个赞
知道大有可为答主
回答量:1102
采纳率:66%
帮助的人:582万
展开全部
相信楼主会喜欢参考资料的,如果要获取文件名等,请找函数GetFileExt、GetFileName、GetPathName等。你找到函数新开一个连接,然后自己看函数说明吧。
注:我提供的连接在参考资料。
更多追问追答
追问
能找到GetFileName建立的整个过程不 我的意思是 包括添加按钮 按钮的参数设定(与函数绑定)等 最好有图例的那种
追答
对于CFileDlg的操作,我给你的连接应该能解决你的问题,所有函数都在那里,包括你想派生重写的虚函数,你仔细看看。
而你说的菜单栏添加按钮,不知道你是否添加成功了,如果成功,那个函数会被执行,没有的话,可按如下步骤来:获取菜单窗口区域保存于CRect rect,修改rect设定按钮区域,创建按钮,设定为rect,并添加消息响应ON_BN_CLICKED(控件ID, 响应函数)。这样就成了。

参考资料: http://msdn.microsoft.com/zh-cn/library/vstudio/dk77e5e7.aspx

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式