MFC数据类型兼容问题

海阔任鱼跃 2011-11-14 06:49:07
void CMy002Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
char filter[]="所有文件(*.*)|*.*||";
CFileDialog fdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,filter);
fdlg.m_ofn.lpstrInitialDir="c:\\";
if(fdlg.DoModal()==IDOK)
{
GetDlgItem(IDC_EDIT1)->SetWindowText(fdlg.GetPathName());
}
}
编译之后有如下错误,不知道该如何进行转换,编辑框的id为IDC_EDIT1




5 IntelliSense: 未定义标识符 "IDC_EDIT1"
3 IntelliSense: 没有与参数列表匹配的构造函数 "CFileDialog::CFileDialog" 实例
4 IntelliSense: 不能将 "const char *" 类型的值分配到 "LPCWSTR" 类型的实体 f:\c++程序设计\vc++范例开发大全\002\002\002dlg.cpp

1.error C2664: “CFileDialog::CFileDialog(BOOL,LPCTSTR,LPCTSTR,DWORD,LPCTSTR,CWnd *,DWORD,BOOL)”: 不能将参数 5 从“char [20]”转换为“LPCTSTR” f:\c++程序设计\vc++范例开发大全\002\002\002dlg.cpp
2 error C2440: “=”: 无法从“const char [4]”转换为“LPCWSTR” f:\c++程序设计\vc++范例开发大全\002\002\002dlg.cpp 162 1 002



那个大虾能告诉我该怎样进行转换啊?在vc++6.0可以,但是在vc++2010就不行了

...全文
367 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyps 2011-11-15
  • 打赏
  • 举报
回复
所以字符串前加: _T("字符串")

如果你确定有IDC_EDIT1这个控件的话,#include "resource.h"

chunyou128 2011-11-15
  • 打赏
  • 举报
回复
把代码注释掉
一句一句放出来调试
friendan 2011-11-15
  • 打赏
  • 举报
回复
//我来说说第一个错误吧!
1.error C2664: “CFileDialog::CFileDialog(BOOL,LPCTSTR,LPCTSTR,DWORD,LPCTSTR,CWnd *,DWORD,BOOL)”: 不能将参数 5 从“char [20]”转换为“LPCTSTR” f:\c++程序设计\vc++范例开发大全\002\002\002dlg.cpp

//从错误提示来看,明显是楼主人第5个参数传错了,呵呵,出错信息中已经给出函数原型了:

CFileDialog::CFileDialog(BOOL,LPCTSTR,LPCTSTR,DWORD,LPCTSTR,CWnd *,DWORD,BOOL)

在vc++2010下工程环境的字符集默认是unicode

建议将这行:char filter[]="所有文件(*.*)|*.*||";
改为: TCHAR filter[]="所有文件(*.*)|*.*||";

//其它的建议也用通用宏吧!...
一条晚起的虫 2011-11-15
  • 打赏
  • 举报
回复
//char filter[]="所有文件(*.*)|*.*||";
TCHAR filter[]=_T("所有文件(*.*)|*.*||");
// unicode工程,很多函数参数都要用 wchar*, 而不是 char*
// 为了兼容,可以用MBCS和unicode都可以用的TCHAR.h的中的宏
峰白 2011-11-15
  • 打赏
  • 举报
回复
1、你用vc2010的工程环境的字符集是unicode么?如果是的话应注意两者的区别
CString str = _T("");应当这样使用
2、你Domodal()后窗口已经销毁,真怀疑用GetDlgItem还能不能获取edit的内容,保险点还是edit关联CString变量吧
3、如果是unicode环境的话,少用char,而是TCHAR
jiuzhoulh 2011-11-15
  • 打赏
  • 举报
回复
在界面没有添加IDC_EDIT1这个CEdit控件
ccnufeng 2011-11-15
  • 打赏
  • 举报
回复
char filter[]="所有文件(*.*)|*.*||";
改成
CString filter = "所有文件(*.*)|*.*||";


未定义标识符 "IDC_EDIT1"
看看你的资源文件里时候有该控件
friendan 2011-11-15
  • 打赏
  • 举报
回复
一觉本来,发现我之前的代码还不够标准,呵呵,补充一下吧:

建议将这行:char filter[]="所有文件(*.*)|*.*||";
改为: TCHAR filter[]=_T("所有文件(*.*)|*.*||");

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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