void xx()
{
using namespace CEGUI;
CEGUI::Window * window = CEGUI::System::getSingleton().getGUISheet()->getActiveChild();
const CEGUI::String& type = window->getType();
CEGUI::MultiLineEditbox * mleb = 0;
CEGUI::Editbox * eb = 0;
if (type == "TaharezLook/MultiLineEditbox" ¦¦ type == "Vanilla/MultiLineEditbox" ¦¦ type == "WindowsLook/MultiLineEditbox")
{
mleb = static_cast<CEGUI::MultiLineEditbox*>(window);
}
else if(type == "TaharezLook/Editbox" ¦¦ type == "Vanilla/Editbox" ¦¦ type == "WindowsLook/Editbox")
{
eb = static_cast<CEGUI::Editbox*>(window);
}
if(mleb)
{
if (!mPastState && (mCopyState ¦¦ mCutState && mleb->getSelectionLength() > 0)) //复制,剪切
{
HWND hwnd = GetActiveWindow();
assert(OpenClipboard(hwnd));
EmptyClipboard();
CEGUI::String string(mleb->getText().data());
string.erase(mleb->getSelectionEndIndex(),mleb->getText().size() - mleb->getSelectionEndIndex());
string.erase(0,mleb->getSelectionStartIndex());
HGLOBAL clipBuffer;
WCHAR* buffer;
const char* str = string.c_str();
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, str, strlen(str), NULL, 0);
wchar_t* wszString = new wchar_t[wcsLen];
//转换
::MultiByteToWideChar(CP_UTF8, NULL, str, strlen(str), wszString, wcsLen);
wszString[wcsLen] = '/0';
clipBuffer = GlobalAlloc(GMEM_DDESHARE,wcsLen * 2 + 2);
buffer = (WCHAR *)GlobalLock(clipBuffer);
wcscpy(buffer,wszString);
buffer[wcsLen] = L'/0';
GlobalUnlock(clipBuffer);
SetClipboardData(CF_UNICODETEXT,clipBuffer);
CloseClipboard();
if (mCutState)
{
CEGUI::String s(mleb->getText().data());
s.erase((CEGUI::String::size_type)(mleb->getSelectionStartIndex()),(CEGUI::String::size_type)mleb->getSelectionLength());
mleb->setCaratIndex(mleb->getSelectionStartIndex());
mleb->setText(s.data());
mleb->ensureCaratIsVisible();
}
}
else if ((mPastState && mCopyState) ¦¦ (mPastState && mCutState)) //粘帖
{
HWND hwnd = GetActiveWindow();
assert(OpenClipboard(hwnd));
HANDLE hData = GetClipboardData(CF_UNICODETEXT);
WCHAR * buffer;
buffer = (WCHAR*)GlobalLock(hData);
GlobalUnlock(hData);
CloseClipboard();
int utf8Num = WideCharToMultiByte(CP_UTF8, NULL, buffer, wcslen(buffer), NULL, 0, NULL, NULL);
char * str = new char[utf8Num + 1];
WideCharToMultiByte(CP_UTF8, NULL, buffer, wcslen(buffer), str, utf8Num, NULL, NULL);
str[utf8Num] = '/0';
CEGUI::String string(mleb->getText().data());
string.erase(mleb->getSelectionStartIndex(),mleb->getSelectionLength());
CEGUI::String strNum((CEGUI::utf8*)str);
string.insert(mleb->getSelectionStartIndex(),strNum);
mleb->setText(string.data());
mleb->setCaratIndex(mleb->getSelectionStartIndex() + strNum.size());
mleb->ensureCaratIsVisible();
mPastState = false;
}
}
}
转载至:
http://lisuyong.com/2010/06/02/cegui%E4%B8%8E%E5%85%B6%E4%BB%96%E7%A8%8B%E5%BA%8F%E5%89%AA%E5%88%87%E5%A4%8D%E5%88%B6%E7%B2%98%E5%B8%96%E7%9A%84%E5%AE%9E%E7%8E%B0%EF%BC%88%E6%94%AF%E6%8C%81%E4%B8%AD%E6%96%87%EF%BC%89/
分享到:
相关推荐
**CEGUI**(Cross-platform Engine GUI)是一个跨平台的图形用户界面库,它为游戏开发者和其他应用程序提供了强大的界面管理能力。本解析将详细介绍CEGUI的核心概念和技术细节。 ##### 1.1 CEGUI历史和本书使用的版本...
【Ogre+CEGUI范例程序】是将CEGUI(Crazy Eddie's GUI System)集成到Ogre3D游戏引擎中的一个示例项目。CEGUI是一个开源的、跨平台的图形用户界面系统,用于游戏开发和其他实时应用。Ogre则是一个强大的3D图形渲染...
将CEGUI与OSG结合使用,可以创建出具有丰富3D视觉效果且交互性极强的应用。这个结合例子"ceguitest"可能包含了一系列的源代码文件,展示了如何在OSG场景中集成CEGUI界面。通常,实现这一结合的步骤包括: 1. **初始...
通过这个Demo,开发者可以学习如何配置CEGUI以支持中文字符,如何选择和加载包含中文字形的字体,以及如何处理键盘输入以实现中文输入。此外,这个Demo还可能包含如何将这些功能整合到自己的CEGUI应用中的实例代码。...
DirectX与CEGUI结合Demo是将两种强大的技术融合在一起,为游戏开发或图形用户界面创建提供了一种高效的方法。DirectX 9.0是微软推出的一套用于Windows平台的多媒体编程接口,它提供了丰富的图形、音频和输入功能,...
CEGUI的一大亮点在于其与游戏引擎的集成,特别是与Orge的整合非常紧密,成为Orge的官方推荐UI库。通过调整接口,理论上CEGUI可以适应各种游戏引擎。然而,由于CEGUI的代码实现较为复杂,初学者可能会觉得有些混乱。...
当检测到输入的字符编码超过128,表示输入的是汉字,这时需要收集连续的两个编码,通过MultiByteToWideChar将其转换为宽字符,然后将宽字符输入到CEGUI中,从而实现中文的正确显示。 总的来说,osg与CEGUI的结合为...
CEGUI,全称为“Crazy Eddie's GUI System”,是一个开源的、跨平台的用户界面引擎,主要用于游戏开发和应用程序设计。这个强大的工具提供了一个灵活且可扩展的框架,允许开发者创建丰富的图形用户界面(GUI)而无需...
4. **数据绑定**:CEGUI支持将界面元素的数据绑定到应用程序的内部状态或其他数据源,实现动态界面更新。 5. **国际化和本地化**:CEGUI内置了对多语言的支持,便于应用程序的全球化。 6. **插件系统**:CEGUI拥有...
关于cegui的编译网上的教程大多是老版本的,最新的cegui-0.8.4版的配置寥寥无几,本文详细介绍了cegui-0.8.4的编译过程,并利用一个实例说明了CEGUI在OSG环境下的使用方法,献给正在学习OSG开发的朋友们作参考。...
**CEGUI库详解与入门教程** CEGUI,全称Crazy Eddie's GUI,是一个开源的图形用户界面(GUI)库,特别适用于游戏开发。该库采用C++编写,基于LGPL许可,允许开发者免受版权束缚,专注于游戏的核心功能开发,而非GUI...
在编译CEGUI时,需要将其源代码编译成可以在目标平台运行的动态链接库(DLL)或其他格式。 CEGUI官方编辑器包括布局编辑器和图像集编辑器。布局编辑器用于设计界面布局,而图像集编辑器则用于编辑图像资源。CEGUI的...
CEGUI(Composite Entity GUI)是一个开源的图形用户界面(GUI)库,专为实时应用程序设计,如游戏和模拟器。它提供了一套高度可定制、模块化的组件,用于创建复杂的用户界面。MFC(Microsoft Foundation Classes)...
5. **运行时加载**:在程序启动时,CEGUI会加载scheme文件,解析XML资源,创建窗口和控件,依据布局文件设置界面布局。 通过这种方式,CEGUI提供了一种声明式的方式来构建和定制GUI,减少了代码量,提高了灵活性,...
第1章 CEGUI的简介 - 5 - 1.1CEGUI历史和本书使用的版本 - 5 - 1.2 CEGUI的编译和例子介绍 - 5 - 1.2.1CEGUI源代码的简介 - 5 - 1.2.2CEGUI源代码编译 - 7 - ...第3章 CEGUI基类的实现 - 39 - .......
6. **预渲染汉字**:参考《游戏中汉字显示的实现与技巧》和《让OGRE支持中文》这两篇文章,可以学习如何将汉字预先渲染到纹理中。对于每个字体,可以生成一个包含所有汉字的位图,但这可能导致较大的纹理文件。对于...