我用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> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符恳请高手指点
代码:
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> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符恳请高手指点
解决方案 »
- 如何获取采集卡采集的数据
- 求助,CHttpFile::ReadString 函数,跳出循环字符串就被清空
- 函数调用问题
- 关于视图切换问题,急。。。。。
- 为对话框中的两个edit关联了Cstring变量,但只对一个赋值,然后UpdateData(false),但两个edit都有值了,why??
- 有关检测usb设备拔插的问题
- Rigel(猎户座-参宿七) 辞职了,高兴啊,散分了!(9)
- 有使用 winsock 控件来通讯的吗?
- 各位大侠!小弟最近迷上API编程,哪位知道哪里有关于API函数库之类的东东,麻烦告之在下!
- MFC中一个关于菜单的问题
- 急救:请教如何mp3解压缩
- 如何快速掌握编写DLL,求指教!
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();//文件名
}
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'”只剩之中类型的错误了
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: 语法错误 : 缺少“;”(在“.”的前面)恳请高手指点一下
都写成_T("xxx");
用_T()、TEXT这个宏
VS中默认编码时UNICODE
而VC6.0默认编码是多字节
建议使用_T或_TEXT宏进行转换
在Windows2000及以上操作系统,用Unicode编码效率会高点
即使用多字节,系统也会转换成UNICODE
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'”
类型是unknown-type??神马玩意儿?....这个你懂的吧?