- Code samples 中的各个网页内容学习并记录
MyGUI入门编写结构,显示一个对话框
1、声明主类class DemoKeeper :public base::BaseManager。其中base::BaseManager是MyGui的一个管理控制父类,里面包括OGRE的基本创建和渲染。
2、添加对应的include文件夹,编译直到通过。
3、编写一个简单的Layout文件。保存文件名为 helloword.layout 。也可以先用demo修改。
<?xml version="1.0" encoding="UTF-8"?> <MyGUI type="Layout" version="3.2.0"> <Widget type="Window" skin="WindowC" position="20 72 211 309" layer="Overlapped" name="_Main"> <Property key="Caption" value="HelloWord!!"/> <Widget type="Button" skin="Button" position="14 22 160 26" name="OK"> <Property key="Caption" value="OK"/> </Widget> </Widget> </MyGUI>
4、创建类class HelloWord :public wraps::BaseLayout。其中wraps::BaseLayout为所有用Layout载入对话框的基类。
5、将HelloWord类的父类初始化为
其中HelloWord.layout为(3)中编写的Layout文件。HelloWord::HelloWord() : BaseLayout("HelloWord.layout") {}
6、添加代码如下
void DemoKeeper::createScene() { createDefaultScene(); //父类函数 //浮动注解框 const MyGUI::VectorWidgetPtr& root = MyGUI::LayoutManager::getInstance() .loadLayout("HelpPanel.layout"); root.at(0)->findWidget("Text")->castType<MyGUI::TextBox>()->setCaption(L"first window.HelloWord!中文测试"); mHelloWord = new HelloWord();//创建对话框 }
7、编译运行,有错误。没有载入资源,添加代码如下
void DemoKeeper::setupResources() { base::BaseManager::setupResources(); //BaseManager::addResourceLocation //调用Ogre::ResourceGroupManager::addResourceLocation 加载资源 addResourceLocation(getRootMedia() + "/Demo_jp/helloword"); addResourceLocation(getRootMedia() + "/Demos/Demo_Gui"); addResourceLocation(getRootMedia() + "/Common/Scene"); addResourceLocation(getRootMedia() + "/Common/Demos"); }
8、编译运行。可以看到一个对话框。对话框的样式,是根据HelloWord.layout控制的。到这里我们就显示了一个基本的对话框,但是里面的按钮等的功能都没有响应。
其它场景是
void DemoKeeper::createScene() { createDefaultScene(); //父类函数
这个里面自带的。响应对话框的按钮点击
1、添加代码
HelloWord::HelloWord() : BaseLayout("helloword.layout") { //将 mButtonOk 和 对话框名字"OK" 相对应 assignWidget(mButtonOk, "OK"); //托管 按钮点击 mButtonOk->eventMouseButtonClick += MyGUI::newDelegate(this, &HelloWord::notifyMouseButtonClick); }
2、添加响应函数
可以处理按钮动作响应了。void HelloWord::notifyMouseButtonClick(MyGUI::Widget* _sender) { //处理按钮的响应 }
给这个对话框创建一个子对话框
1、参照上面的布置写一个 ChildWin类和ChildWin.layout文件。
2、将ChildWin类修改如下:
3、添加代码如下:ChildWin::ChildWin(MyGUI::Widget* _parent) : BaseLayout("ChildWin.layout", _parent) { //略…… }
4、显示效果。void DemoKeeper::createScene() { //略…… mHelloWord = new HelloWord();//创建对话框 mChildWin = new ChildWin(mHelloWord->getView());//创建子对话框 mChildWin->getView()->setPosition(20,50); }
5、修改helloword.layout 文件如下<Widget type="Window" skin="WindowC" position="20 72 711 709" layer="Overlapped" name="_Main">
6、显示效果
先到这里吧。
MyGUI 学习笔记(一)——MyGUI sample1——13.01.23
最新推荐文章于 2024-10-10 08:42:55 发布