winCE 怎样支持中文字体

x_xx_xxx_xxxx 2016-06-15 07:23:26
winCE 手持机 RF650M 是全英系统,怎么才能让它支持中文字符、??
...全文
554 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
x_xx_xxx_xxxx 2016-07-13
  • 打赏
  • 举报
回复
调了好久,这次的代码终于能跑了!!谢谢楼上的帮助!小弟不熟悉开发,带来的麻烦请多多谅解! FONTPATH 是存放字库的路径;_tcscpy(lf.lfFaceName, _T("simfang")); 给lfFaceName 赋值,要和字库的名字一致。 最后,SetWindowFont(hitem1,m_hfont,1); hitem1 是要使用这种字体的控件的HWND;m_hfont 是动态加载字库形成的字体HFONT,1 是默认的 TRUE;

#define FONTPATH _T("/Flash/RFID/Font/simfang.ttf")

LONG OnInit(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
 	int cnt;
	cnt = AddFontResource(FONTPATH);
	if (cnt == 0)
	{
		return (GetLastError());
	}
	::SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

	LOGFONT lf;  
	memset(&lf,0,sizeof(LOGFONT));  
	lf.lfHeight = 22;  
	lf.lfWidth = 0;  
	lf.lfWeight = FW_NORMAL;  
	lf.lfCharSet = GB2312_CHARSET;  
	lf.lfOutPrecision= OUT_DEFAULT_PRECIS;  
	lf.lfClipPrecision= CLIP_STROKE_PRECIS;  
	lf.lfQuality = ANTIALIASED_QUALITY;  
	lf.lfPitchAndFamily= DEFAULT_PITCH|FF_MODERN;  
	_tcscpy(lf.lfFaceName, _T("simfang"));  
       //创建字体
	HFONT m_hfont = CreateFontIndirect(&lf); 

	HWND hitem = GetDlgItem(hDlg,IDC_button_scan);
	SetWindowFont(hitem,m_hfont,1);
	HWND hitem1 = GetDlgItem(hDlg,IDC_psw);
	SetWindowFont(hitem1,m_hfont,1);
	//SetWindowText(hitem,TEXT("李33"));
	return TRUE;
}
  • 打赏
  • 举报
回复
单步看看执行到哪行代码出错。 我没这样用过字体,都是直接修改系统的。其实就算你没有bsp,如果是hive注册表也是可以改的。 就如你的simfang.ttf放在flash中,然后修改注册表中字库的位置就好了。
x_xx_xxx_xxxx 2016-07-13
  • 打赏
  • 举报
回复
引用 17楼这个家伙很懒1 的回复:
单步看看执行到哪行代码出错。 我没这样用过字体,都是直接修改系统的。其实就算你没有bsp,如果是hive注册表也是可以改的。 就如你的simfang.ttf放在flash中,然后修改注册表中字库的位置就好了。
嗯嗯!谢谢!这个调了好久!终于弄好了!晚上把代码发上去!
x_xx_xxx_xxxx 2016-07-12
  • 打赏
  • 举报
回复
引用 15 楼 91program 的回复:
加载完字体后,还必须有使用字体的代码,例如:SetFont 之类,偶在外面没有办法查。 建议 LZ Google/Baidu 一下如何设置窗体显示不同的字体的代码。
版主,不好意思,还需要问您一下,我做出调试之后,仍会有如下报错,这是为什么? (报错和主要代码如下:)


#define FONTPATH _T("/Flash/RFID/Font/simfang.ttf")

LONG OnInit(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{     
         int cnt;
	cnt = AddFontResource(FONTPATH);
	if (cnt == 0)
	{
		return (GetLastError());
	}
	::SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

	LOGFONT lf;  
	memset(&lf,0,sizeof(LOGFONT));  
	lf.lfHeight = 12;  
	lf.lfWidth = 0;  
	lf.lfWeight = FW_NORMAL;  
	lf.lfCharSet = GB2312_CHARSET;  
	lf.lfOutPrecision= OUT_DEFAULT_PRECIS;  
	lf.lfClipPrecision= CLIP_STROKE_PRECIS;  
	lf.lfQuality = ANTIALIASED_QUALITY;  
	lf.lfPitchAndFamily= DEFAULT_PITCH|FF_MODERN;  
	_tcscpy(lf.lfFaceName, _T("simfang"));  
	HFONT m_hfont = CreateFontIndirect(&lf); 

	CEdit *pedit;
       pedit = (CEdit*)GetDlgItem(hDlg,IDC_button_scan);
	pedit->SetFont(CFont::FromHandle(m_hfont),1);
	pedit->SetWindowText(_T("Li 李"));

	//CHttpClient cHttpClient;
	//CString iii = "1";
	//CString strURL = "http://192.168.1.106:8088/test.jsp";
	//iii = cHttpClient.doGet(strURL);
	//_tprintf(_T("\r\nhttp return [%s]\r\n"),iii);

	return TRUE;
}
版主,不好意思,我一直改到现在,弄了好久,也没有找到答案,希望您能帮我一下。万分感谢!
x_xx_xxx_xxxx 2016-07-12
  • 打赏
  • 举报
回复
x_xx_xxx_xxxx 2016-07-12
  • 打赏
  • 举报
回复
引用 12楼91program 的回复:
[quote=引用 11 楼 x_xx_xxx_xxxx 的回复:] [quote=引用 10 楼 91program 的回复:] 注意字体名称,应该会成功的。
版主,还需要问您一个问题,我调用 AddFontResource()这个函数后,返回值为 2 ,非零,但仍然显示不出来中文,这是什么问题?[/quote] 返回非零值,是成功调用了 AddFontResource() 函数。 为什么不成功,你需要看看后面调用的函数的返回值。[/quote]版主,后面需要什么函数?
91program 2016-07-12
  • 打赏
  • 举报
回复
引用 11 楼 x_xx_xxx_xxxx 的回复:
[quote=引用 10 楼 91program 的回复:] 注意字体名称,应该会成功的。
版主,还需要问您一个问题,我调用 AddFontResource()这个函数后,返回值为 2 ,非零,但仍然显示不出来中文,这是什么问题?[/quote] 返回非零值,是成功调用了 AddFontResource() 函数。 为什么不成功,你需要看看后面调用的函数的返回值。
91program 2016-07-12
  • 打赏
  • 举报
回复
加载完字体后,还必须有使用字体的代码,例如:SetFont 之类,偶在外面没有办法查。 建议 LZ Google/Baidu 一下如何设置窗体显示不同的字体的代码。
x_xx_xxx_xxxx 2016-07-11
  • 打赏
  • 举报
回复
引用 10 楼 91program 的回复:
注意字体名称,应该会成功的。
版主,还需要问您一个问题,我调用 AddFontResource()这个函数后,返回值为 2 ,非零,但仍然显示不出来中文,这是什么问题?
91program 2016-06-18
  • 打赏
  • 举报
回复
引用 7 楼 x_xx_xxx_xxxx 的回复:
[quote=引用 4楼91program 的回复:]/windows/font 这个目录 不建议,因为断电会丢失 可以考虑放在其它目录,如:nand 或者 ResidentFlash 中。
嗯嗯!谢谢版主!我调用了这个方法,不过,并没有成功运行!我再找找原因![/quote] 注意字体名称,应该会成功的。
zhujinqiang 2016-06-18
  • 打赏
  • 举报
回复
字库可以保存到SD卡上,不需要去修改注册表, 直接 AddFontResource 函数就可以加载使用字体。 这种方法可能无法改变 CE 系统应用的字体。 还一个方法是修改注册表 可参考 http://blog.csdn.net/lbqhope/article/details/6038271 http://blog.csdn.net/wincemobile/article/details/3839787
x_xx_xxx_xxxx 2016-06-17
  • 打赏
  • 举报
回复
引用 4楼91program 的回复:
/windows/font 这个目录 不建议,因为断电会丢失 可以考虑放在其它目录,如:nand 或者 ResidentFlash 中。
嗯嗯!谢谢版主!我调用了这个方法,不过,并没有成功运行!我再找找原因!
91program 2016-06-16
  • 打赏
  • 举报
回复
/windows/font 这个目录 不建议,因为断电会丢失 可以考虑放在其它目录,如:nand 或者 ResidentFlash 中。
x_xx_xxx_xxxx 2016-06-16
  • 打赏
  • 举报
回复
引用 2 楼 91program 的回复:
如果只是在你的应用中想使用中文,可增加字库,然后通过 AddFontResource() 函数来完成字库的加载。 然后就可以正常使用此字库了。
嗯嗯,谢谢啦!字库我是下载下来,放到/windows/font 这个目录下,然后在程序中调用AddFontResource()吗、?
91program 2016-06-16
  • 打赏
  • 举报
回复
引用 5 楼 cftxlin 的回复:
我遇到的问题是繁体,但用AddFontResource() 来加载繁体字库是不行的,原本显示的“口口”变成了空白,还是有问题
你的用法? 偶以前做产品时,使用 AddFontResource 加载过繁体,阿拉伯等好多国家与地区的字库。
  • 打赏
  • 举报
回复
我遇到的问题是繁体,但用AddFontResource() 来加载繁体字库是不行的,原本显示的“口口”变成了空白,还是有问题
91program 2016-06-15
  • 打赏
  • 举报
回复
如果只是在你的应用中想使用中文,可增加字库,然后通过 AddFontResource() 函数来完成字库的加载。 然后就可以正常使用此字库了。
x_xx_xxx_xxxx 2016-06-15
  • 打赏
  • 举报
回复
好吧,小弟是新手,遇到的全是问题,希望大神可以帮帮我~

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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