Irrlicht实现中文输入
2010-1-28
作者:Kagula
内容概要
以源代码的形式示例,让Irrlicht支持中文输入
读者对象:
熟悉C语言开发工具的程序员
环境
[1]Irrlicht 1.6.1
下载地址:http://irrlicht.sourceforge.net/downloads.html
[2]Free type 2.3.11
下载地址:http://freetype.sourceforge.net/index2.html
以MT方式生成freetype2311MT.lib文件
[3] irrKlang-1.1.3
下载地址:http://www.ambiera.com/irrklang/
[4]VisualStudio2008+SP1
正文
下载Irrlicht 1.6.1 SDK包,解开后里面examples里有0.5UserInterface这个例子,通过修改它,来说明修改步骤。
本文用到了
《Irrlicht输出中文字符串》
里Gui_freetype_font.h和GUI_freetype_font.cpp文件。请确保这两个文件在当前项目中。
第一步:修改IOSOperator.h 和COSOperator.h这两个文件,copyToClipboard 和getTextFromClipboard 函数的数据类型声明,由c8改为wchar_t
例如IOSOperator.h文件关于这两个函数声明修改后的代码如下:
virtual void copyToClipboard(const wchar_t* text) const = 0;
virtual const wchar_t* getTextFromClipboard() const = 0;
第二步:COSOperator.cpp文件相应的copyToClipboard和getTextFromClipboard两个函数体的代码也要做相应修改。
把相关字符串类型从c8*改为wchar_t*,wcslen代替strlen函数调用,wcscpy代替strcpy函数调用。
第三步:修改CGUIEditBox.cpp文件的processKey函数体
case KEY_KEY_C:// copy to clipboard
。。。
core::stringw s; //core::stringc s;
。。。
case KEY_KEY_X:// cut to the clipboard
。。。
core::stringw sc;//core::stringc sc;
。。。
case KEY_KEY_V:
。。。
const wchar_t* p = Operator->getTextFromClipboard();
参考上面的代码段,修改字符串类型。
第四步:修改CIrrDeviceWin32.cpp文件,找到WndProc函数在case(message)体中插入下面的代码:
case WM_IME_CHAR:
event.EventType = irr::EET_KEY_INPUT_EVENT;
event.KeyInput.PressedDown = true;
event.KeyInput.Key = irr::KEY_OEM_CLEAR ;
event.KeyInput.Shift = 0;
event.KeyInput.Control = 0;
char p1[2];
p1[0]=(char)((wParam&0xff00)>>8);
p1[1]=(char)(wParam&0xff);
if(p1[0]==0)
{
event.KeyInput.Char=(short)wParam;
}
else
//多字节代码转unicode
MultiByteToWideChar(CP_OEMCP,MB_COMPOSITE,p1,2,&(event.KeyInput.Char),1);
dev = getDeviceFromHWnd(hWnd);
if (dev)
dev->postEventFromUser(event);
break;
最后一步:修改UserInterface例子中的main.cpp文件
Step1:在包含头文件的地方插入下面的代码
#define COMPILE_WITH_FREETYPE
#include "gui_freetype_font.h"
Step2:在IGUISkin* skin = env->getSkin();前插入下面代码
CGUITTFace myFace;
myFace.load("simhei.ttf");
CGUIFreetypeFont myFont(driver);
myFont.attach(&myFace,12);
Step3:修改IGUISkin* skin = env->getSkin();下面的代码段,修改后的代码如下:
//IGUIFont* font = env->getFont("../../media/fonthaettenschweiler.bmp");
//if (font)
skin->setFont(&myFont);
总结
如正文所示,修改Irrlicht源文件支持中文输入还是很简单的,上面最关键的代码段应该是WM_IME_CHAR事件的响应,值得我们了解。
分享到:
相关推荐
实现Irrlicht1.7.1中文显示、中文输入,压缩包包含示例程序、编译所需的freetype2.8和Irrlicht1.7.1包含文件、库文件资源,这些资源可以直接使用。程序在VS2010下编译通过
Irrlicht引擎中文版使用指南
irrlicht中文支持包 irrlicht中文支持包 irrlicht中文支持包 irrlicht中文支持包 irrlicht中文支持包
Irrlicht Engine 中文学习教程 学习指南
上一篇文章作为一个引子,介绍了粒子系统的简单使用方法,不过Irrlicht的粒子系统提供的效果非常多,只要选对了粒子特效,再加上合适的美术资源,就可以制作相当漂亮以及震撼的特效。同时粒子系统作为场景的一个普通...
粒子系统是作为游戏引擎不可或缺的一部分,它可以创造出非常炫的效果,但是传统上,如果是从Direct3D或者是从OpenGL/...不过在使用了Irrlicht之后,我觉得使用粒子系统简单了许多,只需要调用几个函数就可以解决问题。
Irrlicht引擎的中文显示和输入一直是一个大问题,解决方法一,用位图字体,但用FontTool生成的中文位图字体缺很多中文字,且显示效果差;方法二,用Truetype字体,显示效果佳。本演示程序用网上收集到的CGUITTFont类...
源代码整套完整
解压缩后用include文件夹中文件覆盖Irrlicht下的include里面的对应文件,用source文件夹中文件覆盖Irrlicht下的source里面的对应文件,重新编译内核,请参考里面的Demo的代码
Irrlicht Engine中文学习指南、Irrlicht(鬼火引擎)入门教程、OpenGL开发环境配置过程、Visual_Studio_2008_中OpenGL_开发环境配置
irrlicht(鬼火)3D图形引擎的官方范例中文说明
Irrlicht帮助文档
里面包含了微软雅黑字体,所以占了比较大的空间... 在网络上搜到了几篇让Irrlicht支持中文的博客,虽然已经过去几年了,但依然受用。博客的地址将以参考文献的形式记录下来。下面将要介绍一下如何让Irrlicht支持中文。
中文输入输出demo,FreeType源码
Irrlicht引擎中的 例子说明,这是一个中文的说明,很详细,是网上找的,我打了个包。里面有个说明是关于与其有关的物理引擎和声音引擎
irrlicht的2D操作,只是很简单的载入一个2D图片,然后利用wsad四个键进行操作,简单的使用键盘输入方法
irrlicht例子介绍
irrlicht1.7 帮助文档 英文版 有索引和搜索 Irrlicht是一个3D游戏引擎。它具有高效,实时等特点,是个完全跨平台的引擎,使用D3D、OpenGL和它的自己的渲染程序。支持动态的阴影,粒子系统,角色动画,室内和室外技术...
Irrlicht 英文文档,最新的版本,很好