vc++ MFC文件对话框

ruby0538 2011-08-19 10:43:11
我用VS2008学习vc++中的MFC。照着书上的例子写了个“文件”对话框,在打开的源代码中没有出错,为什么我照着写下后就出错了呢?教材中使用的是VC6.0
代码:
void CFileDlgDlg::OnBnClickedFileOpen()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"All Files(*.TXT)|*.TXT||",AfxGetMainWnd());
CString strPath,strText="";
if(dlg.DoModal() == IDOK)
{
strPath=dlg.GetPathName();
m_OpenPath.SetWindowText(strPath);
CFile file(strPath,CFile::modeRead);
char read[10000];
file.readOnly(read,10000);
for(int i=0;i<file.GetLength();i++)
{
strText += read[i];

}
file.Close();
m_FileText.SetWindowText(strText);
}
}

void CFileDlgDlg::OnBnClickedFileSave()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"All Files(*.TXT)|*.TXT||",AfxGetMainWnd());
CString strPath,strText="";
char write[10000];
if(dlg.DoModal() == IDOK)
{
strPath=dlg.GetPathName();
if(strPath.Right(4) != ".TXT")
strPath += ".TXT";
m_SavePath.SetWindowText(strPath);
CFile file(_T(strPath),CFile::modeCreate|CFile::modeWrite);
m_FileText.GetWindowText(strText);
strcpy(write,strText);
file.Write(write,strText.GetLength());
file.Close()

}
}





这两段代码产生的错误:
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(158) : error C2664: “CFileDialog::CFileDialog(BOOL,LPCTSTR,LPCTSTR,DWORD,LPCTSTR,CWnd *,DWORD,BOOL)”: 不能将参数 5 从“const char [25]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(159) : error C2440: “初始化”: 无法从“const char [1]”转换为“ATL::CStringT<BaseType,StringTraits>”
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL<wchar_t>
1> ]
1> class“ATL::CStringT<BaseType,StringTraits>”的构造函数声明为“explicit”
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL<wchar_t>
1> ]
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(163) : error C2065: “m_OpenPath”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(163) : error C2228: “.SetWindowTextW”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(166) : error C2064: 项不会计算为接受 2 个参数的函数
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(173) : error C2065: “m_FileText”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(173) : error C2228: “.SetWindowTextW”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(181) : error C2664: “CFileDialog::CFileDialog(BOOL,LPCTSTR,LPCTSTR,DWORD,LPCTSTR,CWnd *,DWORD,BOOL)”: 不能将参数 5 从“const char [25]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(182) : error C2440: “初始化”: 无法从“const char [1]”转换为“ATL::CStringT<BaseType,StringTraits>”
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL<wchar_t>
1> ]
1> class“ATL::CStringT<BaseType,StringTraits>”的构造函数声明为“explicit”
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL<wchar_t>
1> ]
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2065: “m_SavePath”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2228: “.SetWindowTextW”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(190) : error C2065: “LstrPath”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(191) : error C2065: “m_FileText”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(191) : error C2228: “.GetWindowTextW”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(192) : error C2664: “strcpy”: 不能将参数 2 从“CString”转换为“const char *”
1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符





恳请高手指点
...全文
587 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
猿创日记 2011-08-19
  • 打赏
  • 举报
回复
VS2008默认使用unicode。你可以选择在VS里面设置,选择菜单Project(工程)->XXX Propertites(工程选项)进入之后,选择第二个:Configuration Propertites->General->Project Defaults->Character Set选择Use Multi-Byte Character Set.这样之后你的代码就可以编译了。

或者你也可以改你的代码,需要转换一些变量类型。比如对于CString类型在赋值的时候就应该是这样:CString strPath = _T("");至于其他的你可以google以下。按照错误提示,去google~~
菜鸟一个 2011-08-19
  • 打赏
  • 举报
回复
CString sFilter = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"); //限定文件类型
CFileDialog Dialog( true, NULL, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, (LPCTSTR)sFilter,NULL );//定制打开文件对话框
if( Dialog.DoModal() == IDOK ) //弹出打开文件对话框
{
CString spathName = Dialog.GetPathName(); //路径
CString m_FileName = Dialog.GetFileName();//文件名
}
我才是心翼 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ruby0538 的回复:]

引用 6 楼 doctorwing 的回复:
你先如图设置一下项目属性,然后再试试

我设置了的,可是还有 那种 什么什么未声明的错误
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2065: “m_SavePath”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189……
[/Quote]

类型是unknown-type??

神马玩意儿?....这个你懂的吧?
wltg2001 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ruby0538 的回复:]
引用 6 楼 doctorwing 的回复:
你先如图设置一下项目属性,然后再试试

我设置了的,可是还有 那种 什么什么未声明的错误
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2065: “m_SavePath”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : ……
[/Quote]
这种错误应该看看m_SavePath这个变量到底是什么了?上面的代码中没看到m_SavePath的定义,不好说。
ruby0538 2011-08-19
  • 打赏
  • 举报
回复
不行的还是老是出现错误
呔妖怪来嘛 2011-08-19
  • 打赏
  • 举报
回复
改成 not set呢
ruby0538 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 doctorwing 的回复:]
你先如图设置一下项目属性,然后再试试
[/Quote]
我设置了的,可是还有 那种 什么什么未声明的错误
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2065: “m_SavePath”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2228: “.SetWindowTextA”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”
龙行天下之Sky 2011-08-19
  • 打赏
  • 举报
回复
这是编码的改变产生的原因
VS中默认编码时UNICODE
而VC6.0默认编码是多字节
建议使用_T或_TEXT宏进行转换
在Windows2000及以上操作系统,用Unicode编码效率会高点
即使用多字节,系统也会转换成UNICODE
wltg2001 2011-08-19
  • 打赏
  • 举报
回复
改来改去的太麻烦了,你干脆在工程的属性里将字符集由UNICODE改成多字节吧
我才是心翼 2011-08-19
  • 打赏
  • 举报
回复
你先如图设置一下项目属性,然后再试试

Eleven 2011-08-19
  • 打赏
  • 举报
回复
你所有的"xxx"字符串
都写成_T("xxx");
用_T()、TEXT这个宏
ruby0538 2011-08-19
  • 打赏
  • 举报
回复
如果我按照 :
CString spathName = Dialog.GetPathName(); //路径
CString m_FileName = Dialog.GetFileName();//文件名

这种方法做,以前的问题不显示了,但是会出现新的问题:
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(163) : error C2143: 语法错误 : 缺少“;”(在“.”的前面)
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(173) : error C2143: 语法错误 : 缺少“;”(在“.”的前面)
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2143: 语法错误 : 缺少“;”(在“.”的前面)
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(191) : error C2143: 语法错误 : 缺少“;”(在“.”的前面)



恳请高手指点一下
ruby0538 2011-08-19
  • 打赏
  • 举报
回复
果然错误少了好多。
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(163) : error C2065: “m_OpenPath”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(163) : error C2228: “.SetWindowTextA”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(166) : error C2064: 项不会计算为接受 2 个参数的函数
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(173) : error C2065: “m_FileText”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(173) : error C2228: “.SetWindowTextA”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2065: “m_SavePath”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(189) : error C2228: “.SetWindowTextA”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(191) : error C2065: “m_FileText”: 未声明的标识符
1>e:\vc\filedlg\filedlg\filedlgdlg.cpp(191) : error C2228: “.GetWindowTextA”的左边必须有类/结构/联合
1> 类型是“'unknown-type'”



只剩之中类型的错误了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧