文档库 最新最全的文档下载
当前位置:文档库 › CEGUI官方资料1

CEGUI官方资料1

CEGUI官方资料1
CEGUI官方资料1

CEGUI官方资料翻译之【一】收藏

CEGUI渲染入门

不管你用的是什么引擎,至少要做如下所示最基础的三步,才能使CEGUI运行起来。

1. 创建CEGUI::Renderer 对象。

2. 创建CEGUI::System 对象。

3. 调用渲染函数。

当然,真正实现游戏GUI,你还需要装载相关的数据文件、进行一些最基础的初始化(这在装载数据文件和初始化入门一文中进行讲解),你也需要处理用户输入(这在输入处理入门一文中进行讲解)。

1. 创建CEGUI::Renderer 对象

这一步相当直观,对于所支持的渲染组件(比如:Direct 3D9, OpenGL, Ogre3D等),这步应该没有问题。当然,要记得包含所使用渲染组件的头文件。还有,Ogre3D现在已经将它的渲染组件改为Ogre而不是CEGUI。(切记:在程序结束的时候,要删除此Renderder对象)

创建CEGUI::Renderer 对象代码如下:

Direct3D 8.1

CEGUI::DirectX81Renderer* myRenderer =

new CEGUI::DirectX81Renderer( myD3D8Device );

Direct3D 9

CEGUI::DirectX9Renderer* myRenderer =

new CEGUI::DirectX9Renderer( myD3D9Device, 0 );

OpenGL

CEGUI::OpenGLRenderer* myRenderer =

new CEGUI::OpenGLRenderer( 0 );

Ogre3D

CEGUI::OgreCEGUIRenderer* myRenderer =

new CEGUI::OgreCEGUIRenderer( myRenderWindow );

Irrlicht Engine

CEGUI::IrrlichtRenderer* myRenderer =

new CEGUI::IrrlichtRenderer( myIrrlichtDevice, true );

Direct3D 8.1

CEGUI::DirectX81Renderer* myRenderer =

new CEGUI::DirectX81Renderer( myD3D8Device );

Direct3D 9

CEGUI::DirectX9Renderer* myRenderer =

new CEGUI::DirectX9Renderer( myD3D9Device, 0 );

OpenGL

CEGUI::OpenGLRenderer* myRenderer =

new CEGUI::OpenGLRenderer( 0 );

Ogre3D

CEGUI::OgreCEGUIRenderer* myRenderer =

new CEGUI::OgreCEGUIRenderer( myRenderWindow );

Irrlicht Engine

CEGUI::IrrlichtRenderer* myRenderer =

new CEGUI::IrrlichtRenderer( myIrrlichtDevice, true );

2. 创建CEGUI::System 对象来对系统进行初始化

这一步更简单。只需new一个CEGUI::System对象,并把刚创建的CEGUI::Renderer对象的指针传送给它即可。这时整个系统将自动初始化。

new CEGUI::System( myRenderer );

new CEGUI::System( myRenderer );

3. 调用渲染函数

这一步有点特殊,所使用的引擎不同,此步的代码也会不同。不过,说白了,你所要做的只是在每帧渲染后调用CEGUI::System::renderGUI而已。使用Ogre3D的同学该高兴了,因为它将由Ogre3D自动完成。对于使用其他引擎的同学,代码也很简单,如下:

Direct3D 8.1 / 9

// Start the scene

myD3DDevice->BeginScene();

// clear display

myD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), \

1.0f, 0);

// user function to draw 3D scene

draw3DScene();

// draw GUI

CEGUI::System::getSingleton().renderGUI();

// end the scene

myD3DDevice->EndScene();

// finally present the frame.

myD3DDevice->Present(0, 0, 0, 0);

OpenGL

// user function to draw 3D scene

draw3DScene();

// draw GUI (should not be between glBegin/glEnd pair)

CEGUI::System::getSingleton().renderGUI();

Irrlicht

// start the scene

myIrrlichtDriver->beginScene(true, true, \

irr::video::SColor(150,50,50,50));

// draw main scene

myIrrlichtSceneManager->drawAll();

// draw gui

CEGUI::System::getSingleton().renderGUI();

// end the scene

myIrrlichtDriver->endScene();

Direct3D 8.1 / 9

// Start the scene

myD3DDevice->BeginScene();

// clear display

myD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), \

1.0f, 0);

// user function to draw 3D scene

draw3DScene();

// draw GUI

CEGUI::System::getSingleton().renderGUI();

// end the scene

myD3DDevice->EndScene();

// finally present the frame.

myD3DDevice->Present(0, 0, 0, 0);

OpenGL

// user function to draw 3D scene

draw3DScene();

// draw GUI (should not be between glBegin/glEnd pair)

CEGUI::System::getSingleton().renderGUI();

Irrlicht

// start the scene

myIrrlichtDriver->beginScene(true, true, \

irr::video::SColor(150,50,50,50));

// draw main scene

myIrrlichtSceneManager->drawAll();

// draw gui

CEGUI::System::getSingleton().renderGUI();

// end the scene

myIrrlichtDriver->endScene();

总结

这只是使CEGUI运行的最初步的介绍。还有好多东西没有提到,比如:在Ogre中应用不同的场景管理器(scene managers),更高级的如:用户自定义资源载入器(resource providers)等等。

CEGUI官方资料翻译之【二】收藏

资源管理入门

如果你已经读了CEGUI渲染入门这篇文章,你已经知道:要想让CEGUI跑起来,至少要对CEGUI进行最基础的初始化,并调用System::renderGUI方法,这看起来很不错。可是,你仍然不能让程序画任何东西!

为了达到胜利的彼岸,下一步是设置资源管理器组(resource provider groups),我们将用它们装载一些文件供CEGUI在渲染的时候使用。

ResourceProvider 是什么?

CEGUI使用了一个工具对象,我们叫它“ResourceProvider”。此对象提供了一组接口负责CEGUI 与其他的文件装载系统通信。

例如:Ogre 和Irrlicht 都有它们自己的资源管理/文件装载子系统,通过实现特定的ResourceProvider 对象,CEGUI 的渲染模块就可以和那些子系统无缝的组合起来。那样,CEGUI 的数据文件就可以通过那些子系统装载了。但是,更底层的库(Direct3D 和OpenGL)

没有那样的资源管理系统,所以,CEGUI 为它们提供了默认资源管理系统(default resource provider)。

DefaultResourceProvider 相关说明

CEGUI::DefaultResourceProvider ---- CEGUI 的默认资源管理系统,是为那些目前还没有的库提供基础帮助的系统。它不仅提供了CEGUI 装载文件、数据时所需的函数,而且对“资源组(resource groups)”也提供了初步的支持。这里的“资源组”其实是一个标签,它代表系统的某个文件夹路径。这就使得我们可以将文件夹中的文件按其逻辑类型进行分组,然后可以通过一个简单的标签而不是硬编码的路径去指定它。也就是说:当数据文件的路径有改动的时候,只需更新资源组的路径而不必更改代码和XML文件中的路径信息。

指定资源组和路径

DefaultResourceProvider 允许你定义任意数目的资源组,并为每个资源组指定一个路径。也就是说:你可以创建一个资源组,比如“imagesets”,并为它指定一个路径,假设是“./mygame/datafiles/gui/imagesets/”。然后,当你通过ImagesetManager装载Imageset的时候,就可以指定“imagesets”为它将要使用的资源组,这样,系统就会在预定义的路径中寻找资源。目前,每个资源组只能被赋予一个路径。

下面给一个小例子来说明。

以前,在没用资源组的时候,你可能这么做:

Imageset* wlis = ImagesetManager::getSingleton().createImageset(

"./mygame/datafiles/gui/imagesets/WindowsLook.imageset");

Imageset* wlis = ImagesetManager::getSingleton().createImageset(

"./mygame/datafiles/gui/imagesets/WindowsLook.imageset");

用了资源组以后,在初始化阶段,你可以用默认的资源管理器像这样创建资源组:

DefaultResourceProvider* rp = static_cast(

CEGUI::System::getSingleton().getResourceProvider());

rp->setResourceGroupDirectory("imagesets",

"./mygame/datafiles/gui/imagesets/");

DefaultResourceProvider* rp = static_cast(

CEGUI::System::getSingleton().getResourceProvider());

rp->setResourceGroupDirectory("imagesets",

"./mygame/datafiles/gui/imagesets/");

然后,当你需要载入imageset的时候,你可以这样指定要使用的资源组:

Imageset* wlis = ImagesetManager::getSingleton().createImageset(

"WindowsLook.imageset", "imagesets");

Imageset* wlis = ImagesetManager::getSingleton().createImageset(

"WindowsLook.imageset", "imagesets");

注意:你不需要提供任何路径信息,因为在你指定的资源组中已经包含了相关的路径信息。比如上面例子中的"imagesets"资源组。稍后,我将教你如何为每种资源类型指定默认资源组,那样在你载入资源的时候就不需要指定资源组了(当然,除非你想从其他的组中载入资源)。

另一个需要注意的是:数据文件不应该包含任何的相对路径信息,一般它们只需包含文件名。

默认资源组

系统定义的任何代表可装载资源的资源类,都有获取和设置默认资源组的静态函数。当需要载入数据文件的时候,它就用那个默认资源组。比如:对于Imageset类,默认的资源组应该指向一个存储imageset xml文件和材质文件的文件夹。

对于每个资源类,它们获取、设置资源组的静态函数的名字都是一样的(xerces是个例外,下面会解释):

const String& getDefaultResourceGroup();

void setDefaultResourceGroup(const String& groupname);

const String& getDefaultResourceGroup();

void setDefaultResourceGroup(const String& groupname);

如下是资源类的一个列表,后面是它们各自管理的资源类型:

CEGUI::Imageset - Imageset xml and texture image files.

CEGUI::Font - Font xml and ttf font files.

CEGUI::Scheme - Scheme xml files.

CEGUI::WindowManager - Window layout xml files.

CEGUI::WindowManager - Window layout xml files.

CEGUI::WidgetLookManager - LookNFeel xml files

CEGUI::ScriptModule - Script files in whichever scripted langauge.

CEGUI::Imageset - Imageset xml and texture image files.

CEGUI::Font - Font xml and ttf font files.

CEGUI::Scheme - Scheme xml files.

CEGUI::WindowManager - Window layout xml files.

CEGUI::WindowManager - Window layout xml files.

CEGUI::WidgetLookManager - LookNFeel xml files

CEGUI::ScriptModule - Script files in whichever scripted langauge.

上面提到过,xerces是个例外,它是“基于Xerces-C的XML解释器(Xerces-C based XML parser)”。对此,有一个特殊的资源组设置文件,它指明schema文件在哪里(它们是用来检查xml的.xsd 文件)。对于这个特殊情况,它的静态成员如下:

const String& XercesParser::getSchemaDefaultResourceGroup();

void XercesParser::setSchemaDefaultResourceGroup(const String&

groupname);

const String& XercesParser::getSchemaDefaultResourceGroup();

void XercesParser::setSchemaDefaultResourceGroup(const String&

groupname);

需要注意的最后一点是:资源管理类也有一个默认的资源组。当一个资源类没有显示指定资源组的时候,系统就使用它。当你把所有的数据文件都放到一个文件夹里的时候,这点就很方便了。

一个完整的例子:配置DefaultResourceProvider

作为结尾,我将用一个完整的例子向你展示CEGUI的例子框架是怎样初始化资源组、初始化它们的目标路径以及怎样为所有的资源类型设置默认资源组的。

当像往常一样初始化CEGUI::System对象之后,我们就设置一组资源组和它们的路径:

// 为DefaultResourceProvider设置所需的路径

CEGUI::DefaultResourceProvider* rp = static_cast

(CEGUI::System::getSingleton().getResourceProvider());

rp->setResourceGroupDirectory("schemes", "../datafiles/schemes/");

rp->setResourceGroupDirectory("imagesets",

"../datafiles/imagesets/");

rp->setResourceGroupDirectory("fonts", "../datafiles/fonts/");

rp->setResourceGroupDirectory("layouts", "../datafiles/layouts/");

rp->setResourceGroupDirectory("looknfeels",

"../datafiles/looknfeel/");

rp->setResourceGroupDirectory("lua_scripts",

"../datafiles/lua_scripts/");

// 这步仅当你使用Xerces作为XML解析器的时候才需要

rp->setResourceGroupDirectory("schemas", "../../XMLRefSchema/");

// 为DefaultResourceProvider设置所需的路径

CEGUI::DefaultResourceProvider* rp = static_cast

(CEGUI::System::getSingleton().getResourceProvider());

rp->setResourceGroupDirectory("schemes", "../datafiles/schemes/");

rp->setResourceGroupDirectory("imagesets",

"../datafiles/imagesets/");

rp->setResourceGroupDirectory("fonts", "../datafiles/fonts/");

rp->setResourceGroupDirectory("layouts", "../datafiles/layouts/");

rp->setResourceGroupDirectory("looknfeels",

"../datafiles/looknfeel/");

rp->setResourceGroupDirectory("lua_scripts",

"../datafiles/lua_scripts/");

// 这步仅当你使用Xerces作为XML解析器的时候才需要

rp->setResourceGroupDirectory("schemas", "../../XMLRefSchema/");

完成这步以后,我们就把资源组和它们的路径都设置好了。最后,为了让系统使用新设置的路径,我们来设置默认资源组:

// 设置默认资源组

CEGUI::Imageset::setDefaultResourceGroup("imagesets");

CEGUI::Font::setDefaultResourceGroup("fonts");

CEGUI::Scheme::setDefaultResourceGroup("schemes");

CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");

CEGUI::WindowManager::setDefaultResourceGroup("layouts");

CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");

// 仅当你用xerces做XML解析器,并为它定义了一个资源组的时候使用

CEGUI::XercesParser::setSchemaDefaultResourceGroup("schemas");

// 设置默认资源组

CEGUI::Imageset::setDefaultResourceGroup("imagesets");

CEGUI::Font::setDefaultResourceGroup("fonts");

CEGUI::Scheme::setDefaultResourceGroup("schemes");

CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");

CEGUI::WindowManager::setDefaultResourceGroup("layouts");

CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");

// 仅当你用xerces做XML解析器,并为它定义了一个资源组的时候使用

CEGUI::XercesParser::setSchemaDefaultResourceGroup("schemas");

总结

目前,你对DefaultResourceProvider 这个类有了一个大体的了解了。你知道了怎么创建资源组并为它们指定路径,还学到如何为CEGUI使用的每个资源类型设置默认资源组。

CEGUI官方资料翻译之【三】收藏

装载数据文件和初始化入门

Ok。目前你已经学习了CEGUI渲染入门和资源管理入门,下一步就要开始学习装载数据文件了。只有装载了相关数据文件,CEGUI才会产生想要的输出!

数据文件概述

CEGUI使用多种类型的数据文件。刚开始学的时候,可能搞不清:它们是什么,它们之间怎样联系以及它们怎样被载入。所以,我决定先介绍一下这些数据文件:它们是什么,它们将被用来干什么以及它们是如何被载入CEGUI的。

XML,XSD?都是XML!

CEGUI所使用的数据文件绝大多数都是XML格式的,除了那些特殊的图片文件(.tag等)以及可载入模块文件(DLL等)。说到这里大家可能会想到那个特殊的.xsd文件。

尽管现在CEGUI的默认XML解析库是Expat XML解析库,可是CEGUI以前一直用Xerces-C++库作为它的默认XML解析库,Crazy Eddies本人也更喜欢这个库。这个库的优势是它提供模式验证(schema validation)。通过模式验证,我们可以在解析期间检测输入的文件是否包含需要的数据以及数据是否被正确的设置。系统需要一些额外的文件才能做这个,它们就是以.xsd作为后缀的模式文件-- CEGUI的模式文件存放在cegui_mk2/XMLRefSchema/目录下。目前,对于.xsd文件,你只需知道:当把Xerce-C++用作XML解析器的时候,必须让ResourceProvider系统能够找到它们。要做到这点很简单,只需设置一个资源组,把此资源组关联到一个包含相关.xsd文件的文件夹,并把这个资源组设置为CEGUI::XercesParser装载.xsd文件时所使用的默认资源组。(相关方法参看资源管理入门)

数据文件

正如前面提到的,CEGUI所用的数据文件除了少数的特殊情况外都是XML格式的。但是,为了清晰的说明数据文件代表什么类型的资源,数据文件并不是以“.xml”作为后缀,而是用更有意义的后缀名。比如,Imageset的后缀名是.imageset,Font的后缀名是.font,等等。下面将对每种文件类型做个简要的说明,以后将对它们进行更深入的讨论。

Imageset

这么说吧,通常,为了提到效率,我们需要把材质等图片组合成一个大的材质图片。在使用的时候就需要在它上面截取得到各个小材质。而这个Imageset就是保存各个小材质在整张源图片上的区域信息(源图片同样在Imageset中指定了)。每个区域信息都有一个独一无二的名字,当提到它们的名字的时候,系统就把它们当作图片处理。所以,也可以说Imageset 中定义了一系列的图片。通过修改Imageset中的源图片名、各个小区域的位置和大小,就可以很轻松的改变所画GUI的外观。

Font

显而易见,Font文件定义了CEGUI使用的字体。所能定义的字体类型有两种:

FreeType Font

这是一种基于true-type(.ttf)的字体文件。从CEGUI 0.5.0开始,在.font文件中用Type="FreeType"指定这种字体类型。在更早的版本中,用"Dynamic"指定。

Pixmap Font

这种字体就是众所周知的位图字体,这种字体基于一个定义了文字图片的Imageset。从CEGUI 0.5.0开始,在.font文件中用Type="Pixmap"指定此字体。在更早的版本中,用"Static"指定。

Scheme

Scheme文件是把其他数据文件联系到一起的主要手段,同时它也是装载和定义各种控件最方便的方法。一个Scheme文件可以包含下面的一种或多种文件(当Scheme被载入的时候,它所包含的文件也将被载入并初始化):

* Imageset (either a full Imageset via XML, or a single image via an image file)

* Font

* WindowSet

* WindowRendererSet

* WindowAlias

* FalagardMapping

Imageset and Font

它们已经被提到过了。这里列出来仅仅为了说明scheme可以包含它们。

WindowSet 主要用来指明一个可载入模块(.dll,.so等)的名字,并列出它所使用的控件中你想注册的控件的名字。如果没有列出任何控件名,那么模块中所有的控件都将被注册。

WindowRendererSet

指明一个可载入模块(.dll等)的名字,并列出它所使用的窗口渲染器(window renderer)中你想注册的窗口渲染器的名字。如果没有列出任何窗口渲染器名,那么模块中所有的窗口渲染器都将被注册。“窗口渲染器”是一个可以控制基本窗口类型渲染的东西。所有的窗口渲染器都是利用'Falagard'蒙皮系统进行渲染的(尽管这不是非常必须的)。

WindowAlias

提供通过别名指定一个窗口/控件类型的方法。用此方法,也可以用另一个控件类型来“替代”一个已经注册的控件类型,这样就达到隐藏已注册控件的效果。

FalagardMapping

用来创建一个可用的WindowType类型。包含三个部分:TargetType --- 指定基类(具有相关功能);Renderer --- 指定窗口渲染器(可以控制渲染指定的TargetType);LookNFeel --- 指定要使用的皮肤(一般这个它们是通过XML格式的looknfeel文件指定)。

Layout

Layout文件用XML格式描述一个窗口的布局。每个镶嵌的“Window”元素定义一个要创建的窗口或控件,“Property”元素为每个定义的窗口设置相关属性。

Config

CEGUI支持使用配置文件。这个文件允许你定义一些默认参数,比如:默认载入的Scheme,默认载入的Layout,初始化和终止脚本文件(ScriptModule中使用),以及其他没有提到的东西。

载入基本的文件

为了成功显示GUI,你需要载入一些文件。至少要载入下面这些:

* Imageset

* Font

* Scheme

值得高兴的是,Scheme文件能自动的载入其他两个文件。介于本教程的目的,我们将载入一个scheme文件和一个font文件--- scheme文件自动帮我们载入一个Imageset文件。代码如下:

// 载入scheme文件,它将自动载入TaharezLook imageset

CEGUI::SchemeManager::getSingleton().loadScheme(

"TaharezLook.scheme" );

// 载入font文件。第一个被载入的字体文件将自动成为默认字体。

if(! CEGUI::FontManager::getSingleton().isFontPresent(

"Commonwealth-10" ) )

CEGUI::FontManager::getSingleton().createFont(

"Commonwealth-10.font" );

// 载入scheme文件,它将自动载入TaharezLook imageset

CEGUI::SchemeManager::getSingleton().loadScheme(

"TaharezLook.scheme" );

// 载入font文件。第一个被载入的字体文件将自动成为默认字体。

if(! CEGUI::FontManager::getSingleton().isFontPresent(

"Commonwealth-10" ) )

CEGUI::FontManager::getSingleton().createFont(

"Commonwealth-10.font" );

上面的代码假设资源组以及默认资源组都按照资源管理入门中描述的方法设置完了。

简单的默认设置

最后,你需要设置一些默认值。这么做是为了确保系统总是有可用的字体和鼠标指针,以防某个窗口或控件没有特别设置它自己的字体和鼠标指针。

实际上,我们不再需要指定一个默认字体,因为FontManager会自动的设置第一个被载入的字体为默认字体。如果它不是你想要的默认字体,你可以设置为其他的。设置的代码如下:System::getSingleton().setDefaultFont( "Commonwealth-10" );

System::getSingleton().setDefaultFont( "Commonwealth-10" );

另一个你需要设置默认值的是鼠标指针。这么做是为了确保当鼠标位于那些没有设置指针的控件上时不至于消失。设置默认鼠标指针的代码如下(本示例使用由上面的scheme载入的TaharezLook imageset):System::getSingleton().setDefaultMouseCursor(

"TaharezLook", "MouseArrow" );

System::getSingleton().setDefaultMouseCursor( "TaharezLook", "MouseArrow" );

如果你打算用工具提示,则需要指明你想用的基于ToolTip的控件类型名。尽管通常情况下是不需要这么做的,这也超出了这个基础教程的范围,其实可以在每个窗口基础上设置它。设置工具提示窗口类型代码如下:

System::getSingleton().setDefaultToolTip( "TaharezLook/Tooltip" );

System::getSingleton().setDefaultToolTip( "TaharezLook/Tooltip" );

总结

目前,我们已经讨论了关于CEGUI所用的数据文件最基础的东西:它们是什么,它们是怎样被载入的,以及最少要做的初始化工作。以后将要对每种数据文件类型做深入的讨论,发掘关于它们更高级的用法。

CEGUI官方资料翻译之【四】收藏

创建CEGUI窗口入门

本课将讲述如何创建并显示一个简单的CEGUI窗口。在继续之前,请确保你已经通读并完全理解了前面的几篇教程:CEGUI渲染入门,资源管理入门和装载数据文件和初始化入门。这非常重要,因为本教程是建立在那些教程的基础之上的。

概念介绍:窗口和控件

在进行教程之前,你必须了解一些重要的概念。

所有的控件都是窗口

这是最重要的概念。所有的控件类都是从Window这个基类派生出来的,所以,在此教程中,每当我提到一个窗口的时候,它可以是一个按钮也可以是一个滚动条控件。

很多的设置都会被继承下去

CEGUI中,窗口的很多的设置和属性都会按窗口父子等级向下传递。比如:如果你将一个窗

口的alpha透明度设置为0.5,那么,默认情况下,所有附属于那个窗口的子窗口/组件都将受到影响。同时要注意:子窗口的实际设置并没有改变---- 最终的属性值通常是由最顶层到当前窗口所有属性值组合而成的。好多东西都有这个规律,比如窗口的销毁:默认情况下,一个窗口在销毁的时候将销毁它的所有子窗口。这一机制最大的优点是:通过改变根窗口的alpha透明度、显示/隐藏、激活/禁用状态等可以很轻易的控制整个GUI;通过简单的销毁根窗口就可以轻松的清空整个GUI。当个别窗口需要更精确的控制或有更好的管理技术用的时候,可以更改这一默认继承机制。

创建窗口

聊够了!我们开始吧。

有两种方法来创建窗口:通过C++硬编码实现和通过XML布局文件实现。下面将讨论这两种方法。

通过C++硬编码实现GUI

CEGUI的所有窗口都是被WindowManager这一对象创建的。你可以通过getSingleton函数获得这个对象,代码如下:

using namespace CEGUI;

WindowManager& wmgr = WindowManager::getSingleton();

using namespace CEGUI;

WindowManager& wmgr = WindowManager::getSingleton();

一般情况,你将用DefaultWindow(或者它的老名字:DefaultGUISheet)作为GUI的“root”窗口。这点并不是必须的,但它是使用CEGUI很好的习惯,而且可以帮助简化布局。

下一步,我们将创建一个DefaultWindow作为GUI的根窗口(这里sheet是root的意思)。Window* myRoot = wmgr.createWindow( "DefaultWindow", "root" );

System::getSingleton().setGUISheet( myRoot );

Window* myRoot = wmgr.createWindow( "DefaultWindow", "root" );

System::getSingleton().setGUISheet( myRoot );

WindowManager::createWindow函数有两个string类型的参数。第一个参数,本例中为“DefaultWindow”,告诉系统你要创建的窗口类型或类。通常,你可以使用的窗口类型是那些当你载入scheme文件的时候注册的窗口类。而有些像DefaultWindow这样的是全局类型,它们总是可用的。第二个参数,本例中为“root”,是一个将要赋予这个窗口的独一无二的名字。以后可以通过这个名字获取指向这个窗口的指针。注意:并不是一定要给你的根窗口命名为“root”,但这是通常的命名约定。

System::setGUISheet函数用来指定一个窗口作为GUI的根窗口。这将替换掉当前的根窗口,但是要注意:之前的一系列窗口/控件并没有被销毁,只是从当前的显示链中摘除---- 通过使用setGUISheet函数,你可以轻松的在多个GUI中切换。

现在,你已经创建了第一个窗口并把它附着在GUI系统上,当系统画GUI的时候,它将把这个窗口作为GUI的根。但是,如果你编译运行这些代码,你依然不会看到任何东西。怎么了?你的程序没有任何问题,问题在:我们刚才创建的DefaultWindow是隐藏的!这就是为什么DefaultWindow那么适合做根窗口的原因:它仅仅被用作供其他的窗口和控件依附的空画布。那么,我们再加把劲吧。。。

现在,我们将要创建一个框架窗口:这个窗口和你桌面上的窗口很类似,它有一个标题栏,也可以移动和改变大小。代码如下:

FrameWindow* fWnd = (FrameWindow*)wmgr.createWindow(

"TaharezLook/FrameWindow", "testWindow" );

FrameWindow* fWnd = (FrameWindow*)wmgr.createWindow(

"TaharezLook/FrameWindow", "testWindow" );

此代码创建了一个“TaharezLook/FrameWindow”窗口。整个系统都使用这种命名约定:窗口类型以组件组名做为前缀(假如你载入了WindowsLook scheme,你就可以创建一个“WindowsLook/FrameWindow”对象)。我们为这个新窗口命名为“testWindow”。需要注意的是:那个类型转换的使用,由于createWindow函数总是返回Window基类指针,尽管对于此例以及其他情况,返回这个Window指针就足够了,但是有时你需要访问子类的方法,所以使用CEGUI的时候示例中的类型转换是很常见的。

为了让系统能够用我们的新窗口做一些有用的事情,我们还需要做一些事情。

首先,我们必须把这个新窗口附着到我们上面指定的根窗口上,代码如下:

myRoot->addChildWindow( fWnd );

myRoot->addChildWindow( fWnd );

现在,我们可以设置它的位置和大小。CEGUI使用一个“统一的(unified)”坐标系,使得可以同时使用相对部分和绝对部分---- 这就是为什么你看到的每个坐标都由两个部分组成。想了解更多请看Introduction and overview of core "Falagard" support systems 一文。回到这个例子:

// 定位在其父窗口左上角开始的1/4位置

fWnd->setPosition(UVector2( UDim( 0.25f, 0 ), UDim( 0.25f, 0 ) ) );

// 设置其大小为其父窗口的一半

fWnd->setSize( UVector2( UDim( 0.5f, 0 ), UDim( 0.5f, 0 ) ) );

// 定位在其父窗口左上角开始的1/4位置

fWnd->setPosition(UVector2( UDim( 0.25f, 0 ), UDim( 0.25f, 0 ) ) );

// 设置其大小为其父窗口的一半

fWnd->setSize( UVector2( UDim( 0.5f, 0 ), UDim( 0.5f, 0 ) ) );

最后,我们为这个框架窗口的标题栏设置一个标题:

fWnd->setText( "Hello World!" );

fWnd->setText( "Hello World!" );

就这样!当编译运行,你会看到一个简单的框架窗口显示在正中央。

XML布局

上面的方法看起来很不错,但是,它有一个很大的弊端:每次你想要调整GUI布局的时候,你就得去修改代码,然后重新编译。这样还不累死了?你真正想要做的是能够把布局保存在文件中,然后在代码中调用那个布局文件。

系统支持XML格式的布局文件,可以通过WindowManager::loadWindowLayout函数载入此文件。此函数为你创建所有的窗口并返回一个指向根窗口的指针。调用setGUISheet设置GUI 的根窗口的时候用此指针再适合不过了。

所以,首先我们需要一个布局文件。下面这个XML文件所描述的窗口和我们上面用C++创建的窗口是一样的:

Window元素的属性和WindowManager::createWindow函数的参数是一一对应的。参见上面讨论过的createWindow 函数。

镶嵌的Window元素用来表明窗口的父子关系。注意:在一个布局文件中,你仅可以拥有一个“根”级别的窗口,这也是通常情况下把DefaultWindow用作根窗口的另一个原因。

Property元素是用来设置当前窗口的属性的。每种窗口/控件类都有很多属性,而且每个类都从它的父类中继承所有的属性。可以在这里查看所有硬编码属性以及它们的格式。由于“Falagard”蒙皮('Falagard' skins)可以创建自己的属性,你所使用的窗口可能会有更多的属性---- 对于那些“软编码”属性,你需要参阅你所使用的蒙皮的相关文档(参看样品蒙皮TaharezLook和WindowsLook)。

如果保存此布局文件为“https://www.wendangku.net/doc/0b18583716.html,yout”,你可以按如下方法加载并设置GUI根窗口:

using namespace CEGUI;

Window* myRoot = WindowManager::getSingleton().loadWindowLayout(

"https://www.wendangku.net/doc/0b18583716.html,yout" );

System::getSingleton().setGUISheet( myRoot );

using namespace CEGUI;

Window* myRoot = WindowManager::getSingleton().loadWindowLayout(

"https://www.wendangku.net/doc/0b18583716.html,yout" );

System::getSingleton().setGUISheet( myRoot );

编译运行后得到的结果和前面用C++写的程序是一样的。不过,现在你可以轻松修改、增强GUI布局而不用修改、重新编译代码啦。

总结

现在,你已经学习了:基本窗口的创建,多窗口的创建,以及如何修改窗口设置。你学习了如何通过C++硬编码实现和如何通过XML布局文件实现。有很多更先进的方法可以同时使用那两种方式,但这最好留给更高级的教程去讲解

CEGUI官方资料翻译之【五】收藏

输入处理入门

通过学习前面的教程,你现在可以渲染GUI,载入文件甚至创建窗口。这时,你也许想给你的GUI添加用户交互了。本教程将讲述这些。

CEGUI 输入处理简介

坏消息

令人吃惊的是:CEGUI不会自动捕获任何用户输入,由程序决定CEGUI需要处理哪些输入。这意味着:每当产生按键或鼠标移动等消息时,你就得把它们传递给CEGUI。尽管初次看起来很奇怪,这其实也给了你更多的控制权---- 我们并没有把输入绑定到特定的系统,你也可以筛选、传递CEGUI需要获得的输入。

传递你的输入!

我们创建了一个接口用来向CEGUI传递输入信息。它由CEGUI::System类的一组成员函数组成---- 对于每种基本的输入类型都有一个函数与之对应:

bool injectMouseMove( float delta_x, float delta_y );

bool injectMousePosition( float x_pos, float y_pos );

bool injectMouseLeaves( void );

bool injectMouseButtonDown( MouseButton button );

bool injectMouseButtonUp( MouseButton button );

bool injectKeyDown( uint key_code );

bool injectKeyUp( uint key_code );

bool injectChar( utf32 code_point );

bool injectMouseWheelChange( float delta );

bool injectTimePulse( float timeElapsed );

bool injectMouseMove( float delta_x, float delta_y );

bool injectMousePosition( float x_pos, float y_pos );

bool injectMouseLeaves( void );

bool injectMouseButtonDown( MouseButton button );

bool injectMouseButtonUp( MouseButton button );

bool injectKeyDown( uint key_code );

bool injectKeyUp( uint key_code );

bool injectChar( utf32 code_point );

bool injectMouseWheelChange( float delta );

bool injectTimePulse( float timeElapsed );

是的,看起来很多。你可能注意到,它们中有些看起来有点重复了,比如"mouse move"和"mouse position"有点重复,"key down"和"char"等。其实这么做是为了方便使用:对于鼠标,可以传递相对位移(injectMouseMove)或绝对坐标(injectMousePosition),具体选择哪种很大程度上取决于你使用的输入库支持的类型。对于按键,可以传递按下、抬起(injectKeyDown/injectKeyUp)以及字符(injectChar)消息,这样做有两个原因:第一,不是所有的按键都产生字符消息(比如shift,alt等等);第二,这允许你自定义按键映射和自动重复按键(CEGUI目前不提供那些函数)。

另外要说明的是函数的布尔返回值。它是用来告诉程序CEGUI是否处理了此消息。如果返回false,说明CEGUI没有处理此消息,此时你的程序可能需要另外做一些处理。

那些函数是用来干什么的

下面,我们将要简要的讨论每个函数的作用,它需要的参数,它用输入做了什么。

bool injectMouseMove( float delta_x, float delta_y )

bool injectMouseMove( float delta_x, float delta_y )

此函数用来传递鼠标移动信息。参数“delta_x”和“delta_y”分别用来指明鼠标在X轴和Y 轴上所移动的位移(有方向)。这将导致鼠标做相应的移动(具体移动的大小可以通过CEGUI::System::setMouseMoveScaling设置比例因子改变)。如果你用此函数,基本上就不需要使用injectMousePosition函数了。

bool injectMousePosition( float x_pos, float y_pos )

bool injectMousePosition( float x_pos, float y_pos )

此函数用来传递鼠标当前的绝对坐标。参数“x_pos”和“y_pos”用来指明鼠标的绝对坐标,坐标系的原点(0, 0)在CEGUI窗口的左上角(所以,在窗口模式下,原点在窗口左上角而不是整个桌面的左上角)。这将把鼠标移动到新的位置。如果你用此函数,基本上就不需要使用injectMouseMove函数了。

bool injectMouseLeaves( void )

bool injectMouseLeaves( void )

此函数用来告诉系统鼠标已经离开程序窗口了。在窗口模式下,此方法很有用。

bool injectMouseButtonDown( MouseButton button )

bool injectMouseButtonDown( MouseButton button )

此函数用来告诉系统某个鼠标按键被按下了。参数“button”可以取如下所示的CEGUI::MouseButton枚举值:

enum MouseButton

{

LeftButton,

RightButton,

MiddleButton,

X1Button,

X2Button,

MouseButtonCount,

NoButton

};

enum MouseButton

{

LeftButton,

RightButton,

MiddleButton,

X1Button,

X2Button,

MouseButtonCount,

NoButton

};

如果你的输入库和上面的不吻合,你必须自己转化。另外,要注意:NoButton的值不是0。

bool injectMouseButtonUp( MouseButton button )

bool injectMouseButtonUp( MouseButton button )

此函数用来告诉系统某个鼠标按键被释放了。它的参数和injectMouseButtonDown是一样的。

操作系统教程习题答案

《操作系统教程》习题答案

习题1 1.单项选择题 (1)大中小型计算机是以为中心的计算机系统。 A、CPU B、存储器 C、系统总线 D、通道 (2)以下关于操作系统的说法正确的是。 A、批处理系统是实现人机交互的系统 B、批处理系统具有批处理功能,但不具有交互能力 C、分时系统是实现自动控制,无须人为干预的系统 D、分时系统即具有分时交互能力,又具有批处理能力 (3)操作系统的职能是管理软硬件资源、合理地组织计算机工作流程和。 A、为用户提供良好的工作环境和接口 B、对用户的命令作出快速响应 C、作为服务机构向其它站点提供优质服务 D、防止有人以非法手段进入系统 (4)设计实时操作系统时,首先应考虑系统的。 A、可靠性和灵活性 B、实时性和可靠性 C、优良性和分配性 D、灵活性和分配性 (5)多道程序设计是指。 A、在分布式系统中同一时刻运行多个程序 B、在一台处理器上并行运行多个程序 C、在实时系统中并发运行多个程序 D、在一台处理器上并发运行多个程序 (6)以下关于并发性和并行性的说法正确的是。 A、并发性是指两个及多个事件在同一时刻发生 B、并发性是指两个及多个事件在同一时间间隔内发生 C、并行性是指两个及多个事件在同一时间间隔内发生 D、并发性是指进程,并行性是指程序 (1)B (2)B (3)A (4)B (5)D (6)B 2.填空题 (1)微机是以总线为纽带构成的计算机系统。 (2)在批处理兼分时系统中,往往把由分时系统控制的作业称为前台作业,把由批处理系统控制的作业称为后台作业。 (3)在分时系统中,若时间片长度一定,则用户数越多,系统响应时间越慢。 (4)分布式操作系统能使系统中若干台计算机协同完成一个共同的任务,分解问题成为子计算并使之在系统中各台计算机上并行执行,以充分利用各计算机的优势。 (5)用户通过网络操作系统可以网络通信、资源共享,从而大大扩展了计算机的应用范围。 3.简答题 (1)什么是操作系统?现代操作系统的基本特征是什么?并发性 (2)什么是批处理系统,衡量批处理系统好坏的主要指标是什么?及时性 (3)试述分时系统的原理及其特性。时间片原则交互性同时性独立性及时性

《英语听力教程4》答案及原文

Unit 1 Shopping and Banking Oline Part I Getting ready B. Keys: 1: drop 2: shopping 3: mouse 4: feet 5: retailing 6: street 7: get 8: down 9: third-party 10: online 11:30% 12: malls 13: Britain 14: gift-buying 15:50% 16: net 17: peroid C. Keys: 1 : the site 2 : merchant, addresses/phone numbers/call up 3 : strict safety measures Part II Net shopping under fire A. Keys: 1 : delivery, delivery 2 : delivery charges 3 : personal information, 87% 4 : returning goods, 47% 5 : order, 35%, dispatch, 87% 6 : money back, two B. Keys: 1 : convenience 2 : choice 3 : obstacles 4 : complete trust 5 : build consummers' trust 6 : mature 7 : payment 8 : service Part III Banking at home A. Keys: 1 : limited opening hours 2 : Online banking services 3 : getting current information on products 4 : ing questions to the bank 5 : competing for customers 6 : having no computers at home B. Keys: 1 : It is banking through the Internet. 2 : 'Online banking' offers convenience which appeals to the kind of customer banks want to keep. 3 : Banks most want to keep people who are young, well-educated, and have good incomes. Part IV More about the topic: Secret of Good Customer Service B. Keys: English Good Customer Service(Harrods) 1 : in a pleasant environment 2 : Second to none 3 : different customers, take a look at everything, alternatives, come to sales assistants 4 : first contact with the customer American Good Customer Service(Saks) 1 : human side, family, occasions in life, a partnership 2 : repeat business, sales Par t V Do you know…? Keys: 1 : c 2 : a、b、c 3 : a、b、c 4 : c 5 : c 6 : b Tape script Part I Getting ready C. Consumers who want to shop online are suggested to bear the following things in mind:Evaluate the site. Always buy goods from well-known and trustworthy companies. Deal with companies which offer customer service, a complaints procedure and have a refund policy.Talk to merchant. E-mail and wait for reponses. Take down the addresses and phone numbers of those companies and make sure they are real by calling them up before buying any products and services.Ensure secure connection. Since

《操作系统教程》习题答案

《操作系统教程》习题答案 习题1 1(单项选择题 (1)大中小型计算机是以为中心的计算机系统。 A、CPU B、存储器 C、系统总线 D、通道 (2)以下关于操作系统的说法正确的是。 A、批处理系统是实现人机交互的系统 B、批处理系统具有批处理功能,但不具有交互能力 C、分时系统是实现自动控制,无须人为干预的系统 D、分时系统即具有分时交互能力,又具有批处理能力 (3)操作系统的职能是管理软硬件资源、合理地组织计算机工作流程和。 A、为用户提供良好的工作环境和接口 B、对用户的命令作出快速响应 C、作为服务机构向其它站点提供优质服务 D、防止有人以非法手段进入系统 (4)设计实时操作系统时,首先应考虑系统的。 A、可靠性和灵活性 B、实时性和可靠性 C、优良性和分配性 D、灵活性和分配性 (5)多道程序设计是指。 A、在分布式系统中同一时刻运行多个程序 B、在一台处理器上并行运行多个程序 C、在实时系统中并发运行多个程序 D、在一台处理器上并发运行多个程序

(6)以下关于并发性和并行性的说法正确的是。 A、并发性是指两个及多个事件在同一时刻发生 B、并发性是指两个及多个事件在同一时间间隔内发生 C、并行性是指两个及多个事件在同一时间间隔内发生 D、并发性是指进程,并行性是指程序 (1)B (2)B (3)A (4)B (5)D (6)B 2(填空题 (1)微机是以总线为纽带构成的计算机系统。 (2)在批处理兼分时系统中,往往把由分时系统控制的作业称为前台作业,把由批 处理系统控制的作业称为后台作业。 (3)在分时系统中,若时间片长度一定,则用户数越多,系统响应时间越慢。 (4)分布式操作系统能使系统中若干台计算机协同完成一个共同的任务,分解问 题成为子计算并使之在系统中各台计算机上并行执行,以充分利用各计算机的优势。 (5)用户通过网络操作系统可以网络通信、资源共享,从而大大扩展了计算机的 应用范围。 3(简答题 (1)什么是操作系统,现代操作系统的基本特征是什么, 并发性 (2)什么是批处理系统,衡量批处理系统好坏的主要指标是什么, 及时性 (3)试述分时系统的原理及其特性。时间片原则交互性同时性独立性及时性 (4)操作系统有哪几大特征,它的最基本特征是什么, 并发性虚拟性共享性异步性最基本特征并发性

施心远主编《听力教程》1-(第2版)Unit-12听力原文和答案

施心远主编《听力教程》1-(第2版)Unit-12听力原文和答案

Unit 12 Section One Tactics for Listening Part 1 Phonetics Exercise: Complete the following short dialogue as you listen to the tape. Pay special attention to the weak forms, link-ups and contractions. [Sound of busy street] Jeff: Hi, Carl, (I) What’s up? Carl: Hey, Jeff. We're (2) on our way to see that new comedy Running From the Mob. Want to (3) go with us? Jeff: I (4) hear it's really funny. Carl: Yeah, it's got a lot of good (5) people in it. Should be great. Let's go. Jeff: Ah, I (6) wish I could, but I've got to study. Carl: Well, maybe next time. You're (7) missing a good thing. Jeff: I know. (8) Got to go. See you. Carl: Bye. Part 2 Listening and Note-Taking TAPESCRIPT Exercise: Complete the passages as you listen to it. The (1) first thing I do at the office is to (2) open all the boss’s letters,

大学操作系统教程复习提纲 1.1

大学操作系统教程复习提纲 第一章操作系统概论 第一节 1.1 1操作系统属于系统软件 2计算机系统的软硬件层次结构分别为,硬件层、系统软件层、支撑软件层、应用软件层3计算机上配置操作系统的主要目标可归结为:方便用户使用、扩充及其功能、管理各类资源、提高系统效率和构筑开放环境 4资源管理三种密切相关的资源管理技术:复用、虚拟和抽象 5复用是为解决物力资源数量不足的问题; 复用共享有两种基本方法:空分复用共享和时分复用共享 空分复用共享表明资源可以从“空间”上分割成更小的单位供进程使用 时分复用共享表明资源可以从“时间”上分割成更小的单位供进程使用;时分复用可进一步划分成时分独占式和时分共享式,进程获得时分独占式资源后对资源执行多个操作,通常使用一个完整周期后才会释放,磁带机是这类资源最典型的例子。 6虚拟,虚拟是指操作系统中实现对计算机软硬件资源进行有效管理的技术和手段; 虚拟的本质是对资源进行转化、模拟和整合。 7抽象,用于处理系统复杂性,重点解决资源易用性 8操作系统中的基础抽象:进程抽象,虚拟抽象,文件抽象; 进程是对处理器的抽象,虚拟是对主存的一种抽象,文件是对设备的一种抽象 9每个进程运行时就拥有一台“虚处理器,虚内存,虚外存和虚设备组成的专用虚拟计算机 10操作系统定义为:管理系统资源,控制程序执行,改善人机界面,提供各种服务,并合理组织计算机工作流程和为用户方便有效地使用计算机提供良好的运行环境的一款系统软件 11操作系统在计算机系统中起四个方面的作用:操作系统作为用户接口和公共服务程序、操作系统作为进程执行的控制者和协调者、操作系统作为扩展机·和虚拟机、操作系统作

施心远主编《听力教程》1 (第2版)Unit 12听力原文和答案

Unit 12 Section One T actics for Listening Part 1 Phonetics Exercise: Complete the following short dialogue as you listen to the tape. Pay special attention to the weak forms, link-ups and contractions. [Sound of busy street] Jeff: Hi, Carl, (I) What’s up? Carl: Hey, Jeff. We're (2) on our way to see that new comedy Running From the Mob. Want to (3) go with us? Jeff: I (4) hear it's really funny. Carl: Y eah, it's got a lot of good (5) people in it. Should be great. Let's go. Jeff: Ah, I (6) wish I could, but I've got to study. Carl: Well, maybe next time. Y ou're (7) missing a good thing. Jeff: I know. (8) Got to go. See you. Carl: Bye. Part 2 Listening and Note-Taking TAPESCRIPT Exercise: Complete the passages as you listen to it. The (1) first thing I do at the office is to (2) open all the boss?s letters, I (3) answer the easy ones and I (4) leave the difficult ones on the (5)

操作系统教程第5版课后答案

操作系统教程第5版课后答案 费祥林、骆斌编著 第一章操作系统概论 习题一 一、思考题 1.简述现代计算机系统的组成及层次结构。 答:现代计算机系统由硬件和软件两个部分组成。是硬件和软件相互交织形成的集合体,构成一个解决计算问题的工具。硬件层提供基本可计算的资源,包括处理器、寄存器、内存、外存及I/O设备。软件层由包括系统软件、支撑软件和应用软件。其中系统软件是最靠近硬件的。 2、计算机系统的资源可分成哪几类?试举例说明。 答:包括两大类,硬件资源和信息资源。硬件资源分为处理器、I/O设备、存储器等;信息资源分为程序和数据等。 3.什么是操作系统?操作系统在计算机系统中的主要作用是什么? 答:操作系统是一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序的集合。 操作系统在计算机系统中主要起4个方面的作用。 (1)服务用户观点——操作系统提供用户接口和公共服务程序 (2)进程交互观点——操作系统是进程执行的控制者和协调者 (3)系统实现观点——操作系统作为扩展机或虚拟机 (4)资源管理观点——操作系统作为资源的管理者和控制者 4.操作系统如何实现计算与操作过程的自动化? 答:大致可以把操作系统分为以下几类:批处理操作系统、分时操作系统、实时操作系统、网络操作系统和分布式操作系统。其中批处理操作系统能按照用户预先规定好的步骤控制作业的执行,实现计算机操作的自动化。又可分为批处理单道系统和批处理多道系统。单道系统每次只有一个作业装入计算机系统的主存储器运行,多个作业可自动、顺序地被装入运行。批处理多道系统则允许多个作业同时装入主存储器,中央处理器轮流地执行各个作业,各个作业可以同时使用各自所需的外围设备,这样可以充分利用计算机系统的资源,缩短作业时间,提高系统的吞吐率 5.操作系统要为用户提供哪些基本的和共性的服务? 答:(1)创建程序和执行程序;(2)数据I/O和信息存取;(3)通信服务;(4)差错检测和处理。为了保证高效率、高质量的工作,使得多个应用程序能够有效的共享系统资源,提高系统效率,操作系统还具备一些其他的功能:资源分配,统计,保护等。 6.试述操作系统所提供的各种用户接口。 答:操作系统通过程序接口和操作接口将其服务和功能提供给用户。程序接口由一组系统调用组成,在应用程序中使用“系统调用”可获得操作系统的低层服务,访问或使用系统管理的各种软硬件资源,是操作系统对外提供服务和功能的手段;操作接口由一组命令和(或)作业控制语言组成,是操作系统为用户提

听力教程3Unit1答案

UNIT 1 Part 1 Spot Dictation Houses in the Future Well, I think houses in the future will probably be (1) quite small but I should think they'll be (2) well-insulated so that you don't need so much (3) heating and (4) cooling as you do now, so perhaps very economical (5) to run. Perhaps they will use (6) solar heating, although I don't know, in this country, perhaps we (7) won't be able to do that so much. Yes, I think they'll be full of (8) electronic gadgets: things like very advanced televisions, videos, perhaps videos which take up ... the screen (9) takes up the whole wall. I should think. Yes, you'll have things like (10) garage doors which open automatically when you (11) drive up, perhaps electronic (12) sensors which will (13) recognize you when you, when you come to the front door even. Perhaps (14) architects and designers will be a bit more (15) imaginative about how houses are designed and perhaps with the (16) shortage of space people will think of putting gardens (17) on the roof and, and maybe rooms can be (18) expanded and, and (19) contracted* depending on what you use them for, so perhaps there'll be a bit more (20) flexibility about that.

操作系统教程第5版部分习题标准答案

第一章: 一、3、10、15、23、27、35 3.什么是操作系统?操作系统在计算机系统中的主要作用是什么? 操作系统是管理系统资源、控制程序执行、改善人机界面、提供各种服务,并合理组织计算机工作流程和为用户有效地使用计算机提供良好运行环境的一种系统软件. 主要作用 (1)服务用户—操作系统作为用户接口和公共服务程序 (2)进程交互—操作系统作为进程执行的控制者和协调者 (3)系统实现—操作系统作为扩展机或虚拟机 (4)资源管理—操作系统作为资源的管理者和控制者 10.试述系统调用与函数(过程)调用之间的区别。 (1)调用形式和实现方式不同; (2)被调用的代码位置不同; (3)提供方式不同 15.什么是多道程序设计?多道程序设计有什么特点? 多道程序设计是指允许多个作业(程序)同时进入计算机系统内存并执行交替计算的方法。从宏观上看是并行的,从微观上看是串行的。 (1)可以提高CPU、内存和设备的利用率; (2)可以提高系统的吞吐率,使单位时间内完成的作业数目增加; (3)可以充分发挥系统的并行性,使设备和设备之间,设备和CPU之间均可并行工作。 23.现代操作系统具有哪些基本功能?请简单叙述之。 (1)处理器管理; (2)存储管理; (3)设备管理; (4)文件管理; (5)联网与通信管理。 27.什么是操作系统的内核? 内核是一组程序模块,作为可信软件来提供支持进程并发执行的基本功能和基本操作,通常驻留在内核空间,运行于内核态,具有直接访问计算机系统硬件设备和所有内存空间的权限,是仅有的能够执行特权指令的程序。 35.简述操作系统资源管理的资源复用技术。

系统中相应地有多个进程竞争使用资源,由于计算机系统的物理资源是宝贵和稀有的,操作系统让众多进程共享物理资源,这种共享称为资源复用。 (1)时分复用共享资源从时间上分割成更小的单位供进程使用; (2)空分复用共享资源从空间上分割成更小的单位供进程使用。 . 二、2、5 2、答:画出两道程序并发执行图如下: (1) (见图中有色部分)。 (2)程序A无等待现象,但程序B有等待。程序B有等待时间段为180ms至200ms间(见 图中有色部分)。 5、答:画出三个作业并行工作图如下(图中着色部分为作业等待时间):

施心远听力教程1 (第三版)第三单元文本及答案

Unit 3 Talking about People Section 1 Tactics for Listening Part 1 Phonetics A. Listen and repeat 1. A: Where were you at one o’clock? B: At one o’clock? At my mother’s. 2. A: Let’s ask him to let us go. B: He won’t let us go. 3. A: I saw them together. B: Where did you see them? B. Complete the following short dialogue as you listen to the tape. Pay special attention to the weak forms, link-ups and contractions. Friend: Hi, Linda. I hear you and John got married (l) last month. Linda: Yeah, we did, (smiling) Three weeks (2) ago. Friend: Well, congratulations! Linda: Thank you. Friend: Did you (3) have a big wedding? Linda: No, we got (4) married at City Hall. We didn’t want to spend very much because (5) we’re saving to buy a house. Friend: Where did you (6) have the reception? Linda: Oh- we (7) didn’t have a reception. We just (8) invited a few friends over for drinks afterwards. Friend: What (9) did you wear? Linda: Just a skirt and blouse. Friend: Oh! Linda: And John wore a (10) jacket and jeans. Friend: Where did you (11) go for your honeymoon? Linda: We (12) didn’t have a honeymoon. We went back to work the next day. Ah, here comes (13) my bus. Friend: Listen. (14) I’d love to help celebrate. Why don’t you two (15) come over for a drink next week? Linda: Sure. We’d love to. (16) I’ll talk to John and (17) call you Monday. Friend: Great. See you (18) next week. Linda: Bye. Part 2 Listening and Note-taking Bob: Look at that, Angela. True-Value is going to sell hi-fi’s for 72.64 pounds. I’m going to buy one. We can save at least 20 pounds.

英语听力教程答案

U n i t1S h o p p i n g a n d B a n k i n g O n l i n e Part 1 Getting ready B: drop shopping mouse feet retailing street get done third-party online 30% mails Britain gift-buying 50% net period C: Major points Details 1. the site 2. merchant Addresses/phone number/call up 3. Strict safety measures 4. Part 2 Net shopping under fire A. delivery delivery delivery charges personal information 87% returning goods 47% order 35% dispatch 87% money back two B.Summary: convenience choice obstacles complete trust build consumers’ trust mature payment service Part 3 Banking at home A: Outline 1. C: limited opening hours 2. Online banking services D: getting current information on products F: e-mailing questions to the bank 3.A: competing for customers 4.A: having no computer at home B: 1. It is banking through the Internet. 2. “Online banking” offers convenience which appeals to the kind of customer banks want to keep. 3. Banks most want to keep people who are young, well-educated, and have good incomes. Part 4 More about the topic B: English Good Customer Service American Good Customer Service 1. in a pleasant environment 1. human side

新动力听力教程1原文及答案

Unit 1 Numbers and Calculations (I) PartOne Warming—up activity Directions:Study the following proverbs and sayings, and thenput theminto Chinese、 1.Kill twobirds with onestone、 一箭双雕。 2. A birdin the hand is worth twoin thebush、 一鸟在手胜过双鸟在林。 3. A missisas good as a mile、 失之毫厘,谬以千里。 4. A fall intothe pit, a gain in your wit、 吃一堑,长一智。 5.Two headsare better than one、 三个臭皮匠顶个诸葛亮. 6.Better master one than engage with ten、 会十事,不如精一事. 7.Ittakesthree generations to make a gentleman、 十年树木,百年树人。 8.Tohim thatdoeseverything inits proper time, one day is worththree、 事事及时做,一日胜三日。 9.Oneboy is a boy, two boyshalfaboy,three boys no bo y、 一个与尚挑水喝,两个与尚抬水喝,三个与尚没水喝。 10、Attwenty yearsofage,thewill reigns;at thi rty,the wit;and at forty,thejudgment、 二十岁时起支配作用得就是意愿;三十岁时就是机智;四十岁时就是判断。 Part two Statements Directions:Listento thefollowing shortstatements an d choos e the best answerfrom the fourchoices、 1.Mary is the actress whoplays the nurse、(B) 2.The quiz iseasy foreveryone except Tom、(C) 3.As soonas I got home,itstartedto rain、(D) 4.Jack isa better student than Henry,but not betterthan Ed、(A) 5.Xi’an cannotpete withShanghai in population、(C) Part three ShortConversations I.Study the following beforelistening、 数字与计算机类得对话主要涉及表示时间长短得数,表示价格高低得数,年、月、日数,街道、房间得编号数,电话号码数等。要求掌握各种形式得数得读法,这就是辨清数字,进行数字与计算得基础。此外,还包括近音、近形数字辨认等. II.Listen to theconversations andchoose the best answerto the following questions you hear、

施心远听力教程1 (第三版)第三单元文本及答案

Unit3TalkingaboutPeople Section1TacticsforListening Part1Phonetics Friend:Well,congratulations! Linda:Thankyou. Friend:Didyou(3)haveabig wedding?

Linda:Oh-we(7)didn’t haveareception.Wejust(8)invitedafew friendsoverfordrinksafterwar ds.Friend:What(9)didyou wear? Linda:Justaskirtandblouse. Friend:Oh! haveahoneymoon.Wewentbacktoworkthenextday.Ah,herecomes(13)mybus. .Wecansaveatleast20pounds. Angela:Yes,andlookatthewashingmachines.They’regoingtosellsomewashingmachinesfor98.95 pounds,gowecansave22pounds.Awashingmachineismoreimportantthanahi-fi. Bob:Bytheway,Angela,doyouknowhowmuchmoneywe’vegot?About200pounds,Ihope.

Angela:Wehaven’tgot200pounds,I’mafraid. Bob:Well,comeon.Howmuchhavewegot? Angela:Only150pounds16. .Wecansaveatleast20pounds. Angela:Yes,andlookatthewashingmachines.They’regoingtosellsomewashingmachinesfor98.95 pounds,gowecansave22pounds.Awashingmachineismoreimportantthanahi-fi. Bob:Bytheway,Angela,doyouknowhowmuchmoneywe’vegot?About200pounds,Ihope.

施心远听力教程1(第三版)第二单元文本及答案

Unit 2 Visiting a New Place Section 1 Tactics for Listening Part 1 Phonetics A. Listen and repeat 1. Oh, you need some lean meat, some vegetables, some butter, flour, salt. 2. I’d like to. But I can’t. 3. A: I had a call from Bill. B: From Bill Who’s Bill A. He’s a very special friend of mine. He telephones me from overseas. Every day. B. Complete the following short dialogue as you listen to the tape. Pay special attention to the weak forms, link-ups and contractions. Woman: Good evening. Man: Good evening. Can you (1) make up this prescription, please Woman: Certainly. (2) Would you like to wait Man: How long (3) will it take Woman: (4)It’ll be ready in twenty minutes. Man: Oh, (5) I’ll come back later. Woman: All right, sir, Man: (6) Shall I pay now or later Woman: (7) Later’ll be all right Part 2 Listening and Note-taking Exercise: Where they are ① now Cinema ④Bridge Street ⑦ Station ③Tapescript: Man: Excuse me. How can I get to the station please

操作系统教程_孙钟秀(第四版)课后习题答案

第一章 作者:佚名来源:网络 1、有一台计算机,具有IMB 内存,操作系统占用200KB ,每个用户进程各占200KB 。如果用户进程等待I/O 的时间为80 % ,若增加1MB 内存,则CPU 的利用率提高多少? 答:设每个进程等待I/O 的百分比为P ,则n 个进程同时等待刀O 的概率是Pn ,当n 个进程同时等待I/O 期间CPU 是空闲的,故CPU 的利用率为1-Pn。由题意可知,除去操作系统,内存还能容纳4 个用户进程,由于每个用户进程等待I/O的时间为80 % , 故: CPU利用率=l-(80%)4 = 若再增加1MB 内存,系统中可同时运行9 个用户进程,此时:cPu 利用率=l-(1-80%)9 = 故增加IMB 内存使CPU 的利用率提高了47 % : 87 %/59 %=147 % 147 %-100 % = 47 % 2 一个计算机系统,有一台输入机和一台打印机,现有两道程序投入运行,且程序A 先开始做,程序B 后开始运行。程序A 的运行轨迹为:计算50ms 、打印100ms 、再计算50ms 、打印100ms ,结束。程序B 的运行轨迹为:计算50ms 、输入80ms 、再计算100ms ,结束。试说明(1 )两道程序运行时,CPU有无空闲等待若有,在哪段时间内等待为什么会等待( 2 )程序A 、B 有无等待CPU 的情况若有,指出发生等待的时刻。 答:画出两道程序并发执行图如下:

(1)两道程序运行期间,CPU存在空闲等待,时间为100 至150ms 之间(见图中有色部分) (2)程序A 无等待现象,但程序B 有等待。程序B 有等待时间段为180rns 至200ms 间(见图中有色部分) 3 设有三道程序,按A 、B 、C优先次序运行,其内部计算和UO操作时间由图给出。 试画出按多道运行的时间关系图(忽略调度执行时间)。完成三道程序共花多少时间比单道运行节省了多少时间若处理器调度程序每次进行程序转换化时lms , 试画出各程序状态转换的时间关系图。 答: 1 )忽略调度执行时间,多道运行方式(抢占式):

操作系统教程第版部分习题答案

操作系统教程第版部分 习题答案 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

第一章: 一、3、10、15、23、27、35 3.什么是操作系统操作系统在计算机系统中的主要作用是什么 操作系统是管理系统资源、控制程序执行、改善人机界面、提供各种服务,并合理组织计算机工作流程和为用户有效地使用计算机提供良好运行环境的一种系统软件. 主要作用 (1)服务用户—操作系统作为用户接口和公共服务程序 (2)进程交互—操作系统作为进程执行的控制者和协调者 (3)系统实现—操作系统作为扩展机或虚拟机 (4)资源管理—操作系统作为资源的管理者和控制者 10.试述系统调用与函数(过程)调用之间的区别。 (1)调用形式和实现方式不同; (2)被调用的代码位置不同; (3)提供方式不同 15.什么是多道程序设计多道程序设计有什么特点 多道程序设计是指允许多个作业(程序)同时进入计算机系统内存并执行交替计算的方法。从宏观上看是并行的,从微观上看是串行的。 (1)可以提高CPU、内存和设备的利用率; (2)可以提高系统的吞吐率,使单位时间内完成的作业数目增加;

(3)可以充分发挥系统的并行性,使设备和设备之间,设备和CPU之间均可并行工作。 23.现代操作系统具有哪些基本功能?请简单叙述之。 (1)处理器管理; (2)存储管理; (3)设备管理; (4)文件管理; (5)联网与通信管理。 27.什么是操作系统的内核? 内核是一组程序模块,作为可信软件来提供支持进程并发执行的基本功能和基本操作,通常驻留在内核空间,运行于内核态,具有直接访问计算机系统硬件设备和所有内存空间的权限,是仅有的能够执行特权指令的程序。 35.简述操作系统资源管理的资源复用技术。 系统中相应地有多个进程竞争使用资源,由于计算机系统的物理资源是宝贵和稀有的,操作系统让众多进程共享物理资源,这种共享称为资源复用。 (1)时分复用共享资源从时间上分割成更小的单位供进程使用; (2)空分复用共享资源从空间上分割成更小的单位供进程使用。 . 二、2、5 2、答:画出两道程序并发执行图如下: 处理器 (1)两道程序运行期间,(见图中有色部分)。 输入机 打印机

《计算机操作系统教程》第三版答案作者左万历+周长林

第一章操作系统概述课后习题 1. 硬件将处理机划分为两种状态,即管态和目态,这样做给操作系统设计带来什么好处 ? 答:便于设计安全可靠的操作系统。管态和目态是计算机硬件为保护操作系统免受用户程序的干扰和破坏而引入的两种状态。通常操作系统在管态下运行,可以执行所有机器指令;而用户程序在目态下运行,只能执行非特权指令。如果用户程序企图在目态下执行特权指令,将会引起保护性中断,由操作系统终止该程序的执行,从而保护了操作系统。 2. 何为特权指令?举例说明之。如果允许用户执行特权指令,会带来什么后果?答:只能在态下才能执行的指令称为特权指令。如开关中断、置程序状态寄存器等。如果允许用户执行特权指令,它将不仅影响当前运行的程序,而且还有可能影响操作系统的正常运行,甚至整个系统。 3. 中断向量在机器中的存储位置是由硬件确定的,还是由软件确定的 ? 答:中断向量在机器中的位置是由硬件确定的。例如,在 INTEL 80x86 CPU 中,内存空间0x00000——0x003ff为中断向量空间。 4. 中断向量的内容是由操作系统程序确定的还是由用户程序确定的?答:中断向量的内容是由操作系统程序确定的。向量的内容包括中断处理程序的入口地址和程序状态字(中断处理程序运行环境),中断处理程序是由操作系统装入内存的,操作系统将根据装入的实际地址和该中断处理程序的运行环境来填写中断向量。 5. 中断向量内的处理机状态位应当标明是管态还是目态 ? 为什么? 答:应当标明是管态。该状态由系统初试化程序设置,这样才能保证中断发生后进入操作系统规定的中断处理程序。 6. 中断和程序并发之间的关系是什么?答:中断是程序并发的必要条件。如果没有中断,操作系统不能获得系统控制权,无法按调度算法对处机进行重新分配,一个程序将一直运行到结束而不会被打断。 7. 说明“栈”和“堆”的差别.答:栈是一块按后进先出(FIFO)规则访问的存储区域,用来实现中断嵌套和子程序调用的参数和返回断点。而堆虽然是一块存储区域,但是对堆的访问是任意的,没有后进先出的要求,堆主要用来为动态变量分配存储空间。 8. 何为系统栈?何为用户栈?系统栈有何用途?用户栈有何用途? 答:系统栈是内存中操作系统空间的一个固定区域;用户栈是内存中用户空间的一个区域。系统栈的作用:(1)保存中断现场,对于嵌套中断,被中断程序的现场信息依次压入系统栈,中断返回时逆序弹出;(2)保存操作系统子程序间相互调用的参数、返回值、返回点、以及子程序的局部变量。用户栈的作用:用于保存用户进程的子程序间相互调用的参数、返回值、返回点、以及子程序的局部变量。 9. 用户堆栈段的长度为何无法确定 ? 答:用户堆栈段的长度主要取决于两个因素:(1)用户

相关文档
相关文档 最新文档