wince下的汉子问题

killhill   2009-12-2 10:23 楼主
请教大家一个问题:

我在wince下的edit控件中输入汉字、数字、字母,并保存在临时文件中。当我再次打开对话框,把临时文件中的东东全部放回edit控件时,数字和字母能正确显示,但是汉字只显示问号“?”!请问这是什么原因?

下面是代码
当edit空间中有变化就保存在临时文件中:
        CFile tempfile;
        CHAR* information=new CHAR[200];
        CString str;
        CEdit *pEditIP=(CEdit*)GetDlgItem(IDC_EDIT_SECTION);
        pEditIP->GetWindowTextW(str);
        tempfile.Open(FILESECTION,CFile::modeWrite);
        tempfile.Seek(148,CFile::begin);
        WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,str.GetBuffer(str.GetLength())
        ,str.GetLength(),information,str.GetLength()*2,NULL,NULL);
        tempfile.Write(information,200);
        ZeroMemory(information,200);
        delete []information;
        tempfile.Close();

下面是当再次打开对话框,初始化对话框时对edit初始化的代码:

        CFile tempfile;
        CString str;
        CHAR* tmp1=new CHAR[200];
        tempfile.Open(FILESECTION,CFile::modeRead);
         tempfile.Seek(148,CFile::begin);
        tempfile.Read(tmp1,200);
        str=tmp1;
        CEdit *pEditIP;
        pEditIP=(CEdit*)GetDlgItem(IDC_EDIT_NAME1);
        pEditIP->SetWindowTextW(str);
         tempfile.close();

在线等待!马上给分!


回复评论 (14)

我是来膜拜标题的
点赞  2009-12-2 10:30
那是因为你没有添加中文支持。
如果不想添加也没关系,输入法输入到editbox中的是GB码,在保存到文件之前转换成UNICODE就可以了。
点赞  2009-12-2 10:31
不好意思!写错了,没注意!大侠们帮忙解决下吧!
点赞  2009-12-2 10:32
我添加了中文支持的。对话框标题就是就有中文汉字!
点赞  2009-12-2 10:33
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,str.GetBuffer(str.GetLength())
,str.GetLength(),information,str.GetLength()*2,NULL,NULL);

这句就是转换成UNICODE的吧
点赞  2009-12-2 10:40
WinCE下默认是使用UNICODE的,你使用的文件类使用的是ASCII码,所以在读写的过程中,就出现了这个问题。
点赞  2009-12-2 11:02
引用: 引用 6 楼 yashi 的回复:
WinCE下默认是使用UNICODE的,你使用的文件类使用的是ASCII码,所以在读写的过程中,就出现了这个问题。

输入法直接敲出来的字未必是UNICODE码。
点赞  2009-12-2 11:04
void CSDFILEDlg::OnWrite()
{
// TODO: Add your control notification handler code here

DWORD len,actlen;
char *pcharbuff;

if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(_T("文件未打开!"));
return;
}

UpdateData(TRUE);
len = m_strDisp.GetLength(); /* 取得输入字符串的长度 */

pcharbuff = new char[len];
LPTSTR pStr = m_strDisp.GetBuffer(len); /* 取得输入字符串的缓冲区指针 */

// 将 Unicode 的 CString 转换为 char 型
WideCharToMultiByte(CP_ACP, 0, pStr, len, pcharbuff, len, NULL, NULL);
m_strDisp.ReleaseBuffer();

BOOL ret = SetFilePointer(hFile, 0, NULL, FILE_BEGIN); /* 移动文件指针到文件开头 */
if (ret == 0xFFFFFFFF)
{
MessageBox(_T("将文件指针移至文件开头失败!"));
delete[] pcharbuff;
return;
}

ret = WriteFile(hFile, pcharbuff, len, &actlen, NULL); /* 将数据写入文件中 */
if (ret == TRUE)
MessageBox(_T("写文件成功!"));
else
MessageBox(_T("写文件失败!"));

if (pcharbuff != NULL)
delete[] pcharbuff;

}
点赞  2009-12-2 11:08
void CSDFILEDlg::OnRead()
{
// TODO: Add your control notification handler code here

DWORD filelen,actlen;
char *pcharbuff;

if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(_T("文件未打开!"));
return;
}

filelen = GetFileSize(hFile, NULL); /* 获取文件大小 */
if (filelen == 0xFFFFFFFF)
{
MessageBox(_T("获取文件大小失败!"));
return;
}

BOOL ret = SetFilePointer(hFile, 0, NULL, FILE_BEGIN); /* 移动文件指针到文件开头 */
if (ret == 0xFFFFFFFF)
{
MessageBox(_T("将文件指针移至文件开头失败!"));
return;
}

pcharbuff = new char[filelen];
ret = ReadFile(hFile, pcharbuff, filelen, &actlen, NULL); /* 从文件中读出数据 */
if (ret == TRUE)
{
LPTSTR pStr = m_strDisp.GetBuffer(filelen);
// 将字节转化为 Unicode 字符串
MultiByteToWideChar(CP_ACP, 0, pcharbuff, filelen, pStr, filelen);
m_strDisp.ReleaseBuffer();
UpdateData(FALSE); /* 将读出的数据显示出来 */
MessageBox(_T("读文件成功!"));
}
else
{
UpdateData(FALSE);
MessageBox(_T("读文件失败!"));
}

if (pcharbuff != NULL)
delete[] pcharbuff;

}
点赞  2009-12-2 11:08
"我在wince下的edit控件中输入汉字、数字、字母,
并保存在临时文件中。当我再次打开对话框,把临时
文件中的东东全部放回edit控件时"
我刚刚做了和楼主一样的事情
利用上面的函数可以显示
汉字,数字,字母均可
我昨天已经做了测试
代码中,有两个编辑框关联的CString类型变量
我可以将代码工程全部发给楼主做参考
也可以给你截图看看我的测试
QQ:253786989
——————————————————————————
JOYZML(朱铭雷) 感谢娜娜
点赞  2009-12-2 11:11
多谢各位了
多谢朱铭雷兄
我先试一试
下午就结题
点赞  2009-12-2 11:35
还是不行啊
我用朱铭雷兄的方法试过了
在虚拟机上可以
但是在arm板上运行就不行
是不是因为我的板子上操作系统添加中文库支持有问题呢?
点赞  2009-12-2 11:59
你这样测试下
在PC机上
创建一个test.txt文本
然后写上几个汉字
通过ActiveSync或者SD卡等下载到板子上
之后程序不写, 而是直接读
试一下
怀疑你在windows ce下
输入的字符直接就是UNICODE字符
而程序再次做了转化
——————————————————————————
JOYZML(朱铭雷)
点赞  2009-12-2 12:19
路过,值得学习一下
点赞  2010-5-17 09:04
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复