History: MyGUI quickstart
Source of version: 9
Copy to clipboard
This is quickstart for __MyGUI 3.0__. If you want to use earlier version of MyGUI use ((MyGUI quickstart old|this page)).
Copy ''MyGUI_Media'' folder from 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'' to additional dependencies.
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'' to additional dependencies.
!!Code
__includes:__
You need to have additional include folder for this - ''path_to_MyGUI/MyGUIEngine/include'' and ''path_to_MyGUI/Platforms/Ogre/OgrePlatform/include'' and add to your code next includes:
{CODE(wrap="1", colors="c++")}
#include "MyGUI.h"
#include "MyGUI_OgrePlatform.h"
{CODE}
Before you initialize the GUI, be sure to create a viewport. This is sent to the OgrePlatform class and stores it for use later during the "initialise" method call.
__declaration:__
{CODE(wrap="1", colors="c++")}MyGUI::Gui* mGUI;{CODE}
__initialisation:__
{CODE(wrap="1", colors="c++")}
MyGUI::OgrePlatform* mPlatform = new MyGUI::OgrePlatform();
mPlatform->initialise(mWindow, mSceneManager); // mWindow is Ogre::RenderWindow*, mSceneManager is Ogre::SceneManager*
mGUI = new MyGUI::Gui();
mGUI->initialise();
{CODE}
__mouse and keyboard input:__
{CODE(wrap="1", colors="c++")}
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));
//...
}
{CODE}
%note% __Note:__ for those who used previous versions of MyGUI: you don't need to call injectFrameEntered every frame in MyGUI 3.0 (now renderer do this)
%note% __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):
{CODE(wrap="1", colors="c++")}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{CODE}
__create button and set callback:__
{CODE(wrap="1", colors="c++")}
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);
{CODE}
__another way of creating button and setting callback:__
in ''sample.layout'':
{CODE(wrap="1", colors="xml")}
<?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}
__code:__
{CODE(wrap="1", colors="c++")} // load layout
MyGUI::LayoutManager::getInstance().load("sample.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);
{CODE}
__method signature for eventMouseButtonClick:__
{CODE(wrap="1", colors="c++")}
void CLASS_NAME::METHOD_NAME(MyGUI::WidgetPtr _sender)
{
//...
}
void CLASS_NAME::STATIC_METHOD_NAME(MyGUI::WidgetPtr _sender)
{
//...
}
void GLOBAL_FUNC_NAME(MyGUI::WidgetPtr _sender)
{
//...
}
{CODE}
__destruction:__
{CODE(wrap="1", colors="c++")}
mGUI->shutdown();
delete mGUI;
mGUI = 0;
mPlatform->shutdown();
delete mPlatform;
mPlatform = 0;
{CODE}