MyGUI quickstart        
Print


This is a quick start for MyGUI 3.0+. If you want to use an earlier version of MyGUI, use this page.

Copy the MyGUI_Media folder from the downloaded package (or from svn) and add the path to it in your resources.cfg.

Compile MyGUI and put MyGUIEngine(_d).dll near the executable file and add MyGUIEngine(_d).lib as an additional dependency.

You will also need to compile MyGUI.OgrePlatform as an interface for the MyGUI library to the Ogre rendering engine, and add MyGUI.OgrePlatform(_d).lib as an additional dependency.

If MyGUI was built as a static library, freetype####(_d).lib is also required (#### - your freetype version).

Code

includes:
You need to add these to the included folders: - path_to_MyGUI/MyGUIEngine/include and path_to_MyGUI/Platforms/Ogre/OgrePlatform/include, and add to your code the following includes:

#include "MyGUI.h"
#include "MyGUI_OgrePlatform.h"

 
Before you initialize the GUI, be sure to create a viewport. This is sent to the OgrePlatform class and stores it for later use in the "initialise" method call.

declaration:

MyGUI::Gui* mGUI;

 
initialisation:

MyGUI::OgrePlatform* mPlatform = new MyGUI::OgrePlatform();
mPlatform->initialise(mWindow, mSceneManager); // mWindow is Ogre::RenderWindow*, mSceneManager is Ogre::SceneManager*
mGUI = new MyGUI::Gui();
mGUI->initialise();

 
mouse and keyboard input:

class CLASS_NAME : public OIS::MouseListener , public OIS::KeyListener
 
bool CLASS_NAME::mouseMoved( const OIS::MouseEvent &arg )
{
    MyGUI::InputManager::getInstance().injectMouseMove(arg.state.X.abs, arg.state.Y.abs, arg.state.Z.abs);
    //...
}
 
bool CLASS_NAME::mousePressed( const OIS::MouseEvent &arg, OIS::MouseButtonID id )
{
    MyGUI::InputManager::getInstance().injectMousePress(arg.state.X.abs, arg.state.Y.abs, MyGUI::MouseButton::Enum(id));
    //...
}
 
bool CLASS_NAME::mouseReleased( const OIS::MouseEvent &arg, OIS::MouseButtonID id )
{
    MyGUI::InputManager::getInstance().injectMouseRelease(arg.state.X.abs, arg.state.Y.abs, MyGUI::MouseButton::Enum(id));
    //...
}
 
bool CLASS_NAME::keyPressed( const OIS::KeyEvent &arg )
{
    MyGUI::InputManager::getInstance().injectKeyPress(MyGUI::KeyCode::Enum(arg.key), arg.text);
    //...
}
 
bool CLASS_NAME::keyReleased( const OIS::KeyEvent &arg )
{
    MyGUI::InputManager::getInstance().injectKeyRelease(MyGUI::KeyCode::Enum(arg.key));
    //...
}

Info Note: For those who have used previous versions of MyGUI: you don't need to call injectFrameEntered every frame in MyGUI 3.0+ (the renderer does this now.)

Info Note: If you can't move your cursor all over the rendering area, you may need to add the following code to your app's initialization (and also to your "window resize event" callback):

const OIS::MouseState &mouseState = mMouse->getMouseState(); // mMouse is type of OIS::Mouse*
mouseState.width = 1024; // your rendering area width
mouseState.height = 768; // your rendering area height

 
create button and set callback:

MyGUI::ButtonPtr button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
button->setCaption("exit");
// set callback
button->eventMouseButtonClick += MyGUI::newDelegate(CLASS_POINTER, &CLASS_NAME::METHOD_NAME); // CLASS_POINTER is pointer to instance of a CLASS_NAME (usually '''this''')
// or
//button->eventMouseButtonClick += MyGUI::newDelegate(STATIC_METHOD_NAME);
//button->eventMouseButtonClick += MyGUI::newDelegate(GLOBAL_FUNC_NAME);

Another way of creating button and setting callback:
In sample.layout:

<?xml version="1.0" encoding="UTF-8"?>
 
<MyGUI type="Layout">
 
    <Widget type="Button" skin="Button" position="10 10 300 26" align="Default" layer="Main" name="MyFirstButton" >
        <Property key="Widget_Caption" value="exit" />
    </Widget>
 
</MyGUI>

code:

// load layout
MyGUI::LayoutManager::getInstance().loadLayout("sample.layout");
//MyGUI::LayerManager::getInstancePtr()->resizeView(MyGUI::RenderManager::getInstancePtr()->getViewSize()); //Uncomment this line if you want to align worked immediately after loading layout
// set callback
MyGUI::ButtonPtr button = mGUI->findWidget<MyGUI::Button>("MyFirstButton");
button->eventMouseButtonClick += MyGUI::newDelegate(CLASS_POINTER, &CLASS_NAME::METHOD_NAME); // CLASS_POINTER is pointer to CLASS_NAME ('''this''')
// or
//button->eventMouseButtonClick += MyGUI::newDelegate(STATIC_METHOD_NAME);
//button->eventMouseButtonClick += MyGUI::newDelegate(GLOBAL_FUNC_NAME);

method signature for eventMouseButtonClick:

void CLASS_NAME::METHOD_NAME(MyGUI::WidgetPtr _sender)
{
   //...
}
 
void CLASS_NAME::STATIC_METHOD_NAME(MyGUI::WidgetPtr _sender)
{
    //...
}
 
void GLOBAL_FUNC_NAME(MyGUI::WidgetPtr _sender)
{
    //...
}

destruction:

mGUI->shutdown();
delete mGUI;
mGUI = 0;   
mPlatform->shutdown();
delete mPlatform;
mPlatform = 0;


Contributors to this page: Altren595 points  , jacmoe133512 points  , Hronom13 points  and Datalore87 points  .
Page last modified on Saturday 31 of March, 2012 14:06:20 UTC by Altren595 points .


The content on this page is licensed under the terms of the Creative Commons Attribution-ShareAlike License.
As an exception, any source code contributed within the content is released into the Public Domain.