MyGUI探索(二)搭建一个简单的工程
一、MyGUI自带的DEMO
首先进入之前MyGUI编译好的目录下(笔者是MyGUI-build),打开Terminal,切换bin目录下
cd bin
之后输入ls
,可以看到下图
之后输入
./Demo_Colour
,回车,可以看到Demo_Colour
二、搭建一个HelloWord窗口
此处笔者由于也是初学,为了方便快速学习,选择直接在MyGUI/Demos文件夹下新增了一个Demo_HelloWord项目
其中Demo_HelloWord.list和CMakeLists.txt类比其他的改一下就好,还要在MyGUI/Media/Demos目录下建立同名项目,用来存放layout文件
最终的效果如下图
各部分的详细代码如下,部分的解读会在后续发布
HelloWord.h
#ifndef DEMO_KEEPER_H_
#define DEMO_KEEPER_H_
#include <MyGUI.h>
#include "Base/BaseDemoManager.h"
#include "HelloWord.h"
#include "ChildWin.h"
namespace demo
{
class DemoKeeper : public base::BaseDemoManager
{
public:
DemoKeeper();
void createScene() override;
void destroyScene() override;
private:
void setupResources() override;
void notifyEventAction(MyGUI::Widget* _sender, size_t _index);
private:
HelloWord* mHelloWord;
ChildWin* mChildWin;
};
} // namespace demo
#endif // DEMO_KEEPER_H_
HelloWord.cpp
#include "HelloWord.h"
#include <BaseLayout/BaseLayout.h>
#include <MyGUI.h>
namespace demo
{
HelloWord::HelloWord() : BaseLayout("HelloWord.layout")
{
assignWidget(mButtonOk, "OK");
mButtonOk->eventMouseButtonClick += MyGUI::newDelegate(this, &HelloWord::notifyMouseButtonClick);
}
HelloWord::~HelloWord()
{
}
MyGUI::Widget* HelloWord::getView()
{
return mMainWidget;
}
void HelloWord::notifyMouseButtonClick(MyGUI::Widget* _sender)
{
//处理按钮的响应
}
} // namespace demo
DemoKeeper.h
#ifndef DEMO_KEEPER_H_
#define DEMO_KEEPER_H_
#include <MyGUI.h>
#include "Base/BaseDemoManager.h"
#include "HelloWord.h"
#include "ChildWin.h"
namespace demo
{
class DemoKeeper : public base::BaseDemoManager
{
public:
DemoKeeper();
void createScene() override;
void destroyScene() override;
private:
void setupResources() override;
void notifyEventAction(MyGUI::Widget* _sender, size_t _index);
private:
HelloWord* mHelloWord;
ChildWin* mChildWin;
};
} // namespace demo
#endif // DEMO_KEEPER_H_
DemoKeeper.cpp
#include "Precompiled.h"
#include "DemoKeeper.h"
#include "Base/Main.h"
namespace demo
{
DemoKeeper::DemoKeeper() : mHelloWord(),mChildWin()
{
}
void DemoKeeper::createScene()
{
base::BaseDemoManager::createScene();
//浮动注解框
const MyGUI::VectorWidgetPtr& root = MyGUI::LayoutManager::getInstance().loadLayout("HelpPanel.layout");
root.at(0)->findWidget("Text")->castType<MyGUI::TextBox>()->setCaption("HelloWord!");
mHelloWord = new HelloWord();//创建对话框
mChildWin = new ChildWin(mHelloWord->getView());//创建子对话框
mChildWin->getView()->setPosition(20,50);
mChildWin->eventAction = MyGUI::newDelegate(this, &DemoKeeper::notifyEventAction);
}
void DemoKeeper::destroyScene()
{
delete mHelloWord;
mHelloWord = nullptr;
delete mChildWin;
mChildWin = nullptr;
}
void DemoKeeper::notifyEventAction(MyGUI::Widget* _sender, size_t _index)
{
//处理通告消息
}
void DemoKeeper::setupResources()
{
base::BaseManager::setupResources();
addResourceLocation(getRootMedia() + "/Demos/Demo_Gui");
addResourceLocation(getRootMedia() + "/Common/Scene");
addResourceLocation(getRootMedia() + "/Common/Demos");
addResourceLocation(getRootMedia() + "/Demos/Demo_HelloWord");
}
} // namespace Demo
MYGUI_APP(demo::DemoKeeper)
ChildWin.h
#ifndef CHILD_WIN_H_
#define CHILD_WIN_H_
#include <MyGUI.h>
#include "HelloWord.h"
#include "BaseLayout/BaseLayout.h"
namespace demo
{
class ChildWin:public wraps::BaseLayout
{
public:
enum TypeEvents
{
EventNew,
EventLoad,
EventQuit
};
public:
ChildWin();
ChildWin(MyGUI::Widget* _parent);
MyGUI::Widget* getView();
~ChildWin();
private:
void notifyMouseButtonClick(MyGUI::Widget* _sender);
public:
MyGUI::delegates::CDelegate2<MyGUI::Widget*,size_t> eventAction;
MyGUI::Button* mButtonNew;
MyGUI::Button* mButtonLoad;
MyGUI::Button* mButtonQuit;
};
} // namespace demo
#endif
ChildWin.cpp
#include "ChildWin.h"
#include <MyGUI.h>
#include "BaseLayout/BaseLayout.h"
namespace demo
{
ChildWin::ChildWin(MyGUI::Widget* _parent) : BaseLayout("ChildWin.layout", _parent)
{
assignWidget(mButtonNew, "New");
assignWidget(mButtonLoad, "Load");
assignWidget(mButtonQuit, "Quit");
//按钮点击
mButtonNew->eventMouseButtonClick += MyGUI::newDelegate(this, &ChildWin::notifyMouseButtonClick);
mButtonLoad->eventMouseButtonClick += MyGUI::newDelegate(this, &ChildWin::notifyMouseButtonClick);
mButtonQuit->eventMouseButtonClick += MyGUI::newDelegate(this, &ChildWin::notifyMouseButtonClick);
}
MyGUI::Widget* ChildWin::getView()
{
return mMainWidget;
}
void ChildWin::notifyMouseButtonClick(MyGUI::Widget* _sender)
{
//发送事件
}
ChildWin::~ChildWin()
{
}
} // namespace demo
HelloWord.layout
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout" version="3.2.0">
<Widget type="Window" skin="WindowC" position="20 72 711 709" 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>
ChildWin.layout
<?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="ChildWin"/>
<Widget type="Button" skin="Button" position="14 22 160 26" name="New">
<Property key="Caption" value="New"/>
</Widget>
<Widget type="Button" skin="Button" position="14 53 160 26" name="Load">
<Property key="Caption" value="Load Test Layout"/>
</Widget>
<Widget type="Button" skin="Button" position="14 85 160 26" name="Quit">
<Property key="Caption" value="Quit"/>
</Widget>
</Widget>
</MyGUI>