MyGUI探索(二)搭建一个简单的工程

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值