嵌入开发(WinCE)的一些经验(9)

来源:本站
导读:目前正在解读《嵌入开发(WinCE)的一些经验(9)》的相关信息,《嵌入开发(WinCE)的一些经验(9)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《嵌入开发(WinCE)的一些经验(9)》的详细说明。
简介:嵌入开发(WinCE)的一些经验

我们都知道windows操作系统有支持ANSI和支持 Unicode的版本,也有都支持的.其中,windows98只能支持ANSI系统环境.windows2000可以支持Unicode和 NSI.windowsCE只支持Unicode.WindowsXP好象也是两个都支持.所以我们在开发多国语言的时候一般都选用 windows2000.因为我们可以构件Unicode工程来支持多国语言的显示.(如果你不理解什么是Unicode可以参看<< Windows核心编程>>的第二章.(在ttp://www.china- pub.com/computers/common/info.asp?id=131提供第二章的免费下载).|完整的下载,我都忘记了|.

为了在控件中显示别国语言(如日文,阿拉伯文等)而不至于显示成????,或者说文字可以显示在控件上,但是你无法获取他们并将他们保存到我们常用的 CString中,这就需要你创建Unicode工程,这样才能支持.如果你一定要在Ansi系统(win98),开发这样的东西.我暂时还没有搞出来。.呵呵,在<>里面说得很清楚,如果你要把这个东西加到里面,即便成功也会造成无法想象的不稳定.关于这点显示的问题,我在下面还有一些支持在98下显示的问题说明,介绍的是用DHTML控件的.下面我先说建立Unicode工程和用Rich Edit 控件(用CRichEditCtrl类支持)显示多语言的问题.

创建Unicode工程只要按照下面步骤进行就可以了.(/***/注释段为摘抄)

/******************* //构件Unicode Debug

1.前提条件:

运行VC++的安装程序,选中MFC的UNICODE支持。

2。VC++Build->configurations...->Add->Configuration->"Unicode Debug"->OK

3.Project->Setting->C++->Preprosesser Definitions->加入UNICODE,_UNICODE, 去掉MBCS即可

4。Project->Setting->lINK->Category->)Outputw->加入wWinMainCRTStartup。

5选择"Win32 Unicode debug"编译方式,代码按照Unicode encoding!

6. Hope it has some help to you.

********************/

实际上只要下面两步骤:

1.project下面选setting,然后选C/C++,在preprocessor definitions中加入

_UNICODE.(不需要去掉_MBCS)

2.就是上面的4.

有了上面步骤,就说明你的工程已经是Unicode工程了.如果你是想把原来的程序改造成Unicode.编译后可能会发生错误,这就要求你改正成 Unicode的正确形式..一般情况下对,字符串常量..你只要在前面加上_T("字符串常量"),就可以了.剩下的多为函数调用和字符转换的问题如 strcpy->lstrcpy和CStringChar *之类的(可以看核心编程)..关于这个转换问题,我这里有一个出自CSDN精华区的网页(别人的总结),不知道现在里面有没有了?如果没有你想要,可以和我联系告知.我将尽力帮助.这里对_T宏说明一点,其实它在ANSI环境下也是通过的.而且就读成相应的环境形式.所以一般情况下,我觉得编程,应该都加上这个宏.免得将来麻烦:).还有一个要考虑的,Unicode因为都是双字节的,所以读取的时候要注意,特别是在写文件的时候.首先,如果你要让你的文件成为Unicode文件,一定要在文件头加上0xFFFE.还有假如你用的是CFile 读写文件也要注意.如果你创建的是以非文本读写的..你应该考虑下面的问题:

CFile file;

CString htm;

if(!file.Open(filename,CFile::modeCreate|CFile::modeWrite))

//Open fail;

WORD wFlag=0xFEFF;

file.Write(&wFlag,2); //这是写Unicode文件标志头.

htm=_T("alkdsj flajdflajdlsfj")

file.Write(htm,htm.GetLength()+1);//这是错误的.应该把后面的长度这样才能把htm内容完整的写到文件里面.

//你可以自己考虑具体问题出现在哪.:).

接着,我再说一下关于Rich Edit控件的问题.因为是昨天刚遇到,所以今天就抽空帮别人解决了.他的问题是这样,在2000下,Unicode工程,RichEdit控件中输入小语种(日文,阿拉伯),无法用GetWindowText等函数获取.(获取的都是????).问题原因主要是因为:

(1).Rich Edit控件的版本太低,如RichEdit1.0(riched32.dll)就是不支持Unicode的.所以必须换成RichEdit2.0或者 3.0(riched20.dll)的.所以在你的程序InitInstance()里面应该有下面代码:

HINSTANCE richEdit=::LoadLibrary(_T("riched20.dll"));

if(!richEdit)

AfxMessageBox(_T("Unable to load RichEdit2.0"));

AfxInitRichEdit();

(2).修改你的资源*.rc.打开rc文件.(Open->*.rc|Text方式|)..把原来的"RICHEDIT"改成"RICHEDIT20W"就可以了.如下:

CONTROL "",IDC_RICHEDIT1,"RICHEDIT20W",WS_BORDER |

这样,你利用GetWindowText,就可以得到你要的东西.也就是解决上面的问题。

这儿,我提供方法给那些没有用过RichEdit的人去构造这个控件.

A.当你在对话框中有了Rich Edit后..你编译时发现不能弹出对话框了.请在你的InitInstance()开头加上.AfxInitRichEdit();

B.如果你初始化的话..用下面方式(在OnInitDialog里面加)

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

CHARFORMAT cfDefault;

memset(&cfDefault,0,sizeof(cfDefault));

cfDefault.cbSize=sizeof(cfDefault);

cfDefault.dwMask = CFM_FACE | CFM_SIZE |CFM_CHARSET | CFM_SPACING;

cfDefault.yHeight = 200;

cfDefault.bCharSet =ARABIC_CHARSET; //这是阿拉伯文的.这个好象不会影响控件.|我没研究清楚.不过是不可以用来让我们在非Unicode中获取文字的(或者没有上面解决方式).

strcpy(cfDefault.szFaceName,"Arial");

m_RichEdit1.SetDefaultCharFormat(cfDefault);//设置模式

c.如果要设置你的RichEdit响应事件消息(Envent)用:

CWnd* pWnd=GetDlgItem(IDC_RICHEDIT1);

CRichEditCtrl* pRich=(CRichEditCtrl*)(pWnd);

long nEvn=pRich->GetEventMask();

nEvn |=ENM_CHANGE; //响应OnChangeEdit函数.

pRich->SetEventMask(nEvn);

上面这些就是RichEdit入门.

提醒:《嵌入开发(WinCE)的一些经验(9)》最后刷新时间 2024-03-14 01:07:13,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《嵌入开发(WinCE)的一些经验(9)》该内容的真实性请自行鉴别。