`
webcenterol
  • 浏览: 916638 次
文章分类
社区版块
存档分类
最新评论

Irrlicht实现中文输入

 
阅读更多

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.hGUI_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文件相应的copyToClipboardgetTextFromClipboard两个函数体的代码也要做相应修改。

把相关字符串类型从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中文显示+中文输入

    实现Irrlicht1.7.1中文显示、中文输入,压缩包包含示例程序、编译所需的freetype2.8和Irrlicht1.7.1包含文件、库文件资源,这些资源可以直接使用。程序在VS2010下编译通过

    Irrlicht中文版指南

    Irrlicht引擎中文版使用指南

    irrlicht中文支持包

    irrlicht中文支持包 irrlicht中文支持包 irrlicht中文支持包 irrlicht中文支持包 irrlicht中文支持包

    irrlicht中文教程.pdf

    Irrlicht Engine 中文学习教程 学习指南

    Irrlicht实现水波特效(演示程序+源代码)

    上一篇文章作为一个引子,介绍了粒子系统的简单使用方法,不过Irrlicht的粒子系统提供的效果非常多,只要选对了粒子特效,再加上合适的美术资源,就可以制作相当漂亮以及震撼的特效。同时粒子系统作为场景的一个普通...

    Irrlicht实现粒子系统(演示程序+源代码)

    粒子系统是作为游戏引擎不可或缺的一部分,它可以创造出非常炫的效果,但是传统上,如果是从Direct3D或者是从OpenGL/...不过在使用了Irrlicht之后,我觉得使用粒子系统简单了许多,只需要调用几个函数就可以解决问题。

    Irrlicht1.9中文显示(演示程序+库文件)

    Irrlicht引擎的中文显示和输入一直是一个大问题,解决方法一,用位图字体,但用FontTool生成的中文位图字体缺很多中文字,且显示效果差;方法二,用Truetype字体,显示效果佳。本演示程序用网上收集到的CGUITTFont类...

    Irrlicht1.7.2支持中文显示

    源代码整套完整

    Irrlicht v1.7.1 Windows 中文支持补丁

    解压缩后用include文件夹中文件覆盖Irrlicht下的include里面的对应文件,用source文件夹中文件覆盖Irrlicht下的source里面的对应文件,重新编译内核,请参考里面的Demo的代码

    Irrlicht引擎学习教程

    Irrlicht Engine中文学习指南、Irrlicht(鬼火引擎)入门教程、OpenGL开发环境配置过程、Visual_Studio_2008_中OpenGL_开发环境配置

    irrlicht官方范例中文说明

    irrlicht(鬼火)3D图形引擎的官方范例中文说明

    Irrlicht.net.chm

    Irrlicht帮助文档

    Irrlicht添加对中文的支持(源代码+演示程序)

    里面包含了微软雅黑字体,所以占了比较大的空间... 在网络上搜到了几篇让Irrlicht支持中文的博客,虽然已经过去几年了,但依然受用。博客的地址将以参考文献的形式记录下来。下面将要介绍一下如何让Irrlicht支持中文。

    Irrlicht 中文支持引擎

    中文输入输出demo,FreeType源码

    Irrlicht引擎例子说明及中文

    Irrlicht引擎中的 例子说明,这是一个中文的说明,很详细,是网上找的,我打了个包。里面有个说明是关于与其有关的物理引擎和声音引擎

    irrlicht的helloworld

    irrlicht的2D操作,只是很简单的载入一个2D图片,然后利用wsad四个键进行操作,简单的使用键盘输入方法

    irrlicht例子简介

    irrlicht例子介绍

    irrlicht1.7 帮助文档

    irrlicht1.7 帮助文档 英文版 有索引和搜索 Irrlicht是一个3D游戏引擎。它具有高效,实时等特点,是个完全跨平台的引擎,使用D3D、OpenGL和它的自己的渲染程序。支持动态的阴影,粒子系统,角色动画,室内和室外技术...

    Irrlicht. Realtime 3D Engine Beginner

    Irrlicht 英文文档,最新的版本,很好

Global site tag (gtag.js) - Google Analytics