您的位置:首页 > 产品设计 > UI/UE

MyGUI 学习笔记(三)——MyGUI sample3——13.02.07

2013-03-07 15:42 281 查看
先阅读MyGUI sample 记录并总结

主要内容如下:

1、创建窗口,并相应按钮

2、响应各种事件的详细方法

3、窗口的创建、查找和删除

-------------------------------

HowTo add buttons in window skin

创建窗口的skin:

<Child type="Button" skin="WindowCaption" offset = "3 0 -6 30" align = "HStretch Top" name = "Caption">
<Property key="Scale" value = "1 1 0 0"/>
</Child>


创建窗口:

MyGUI::WindowPtr window = MyGUI::Gui::getInstance().createWidget<MyGUI::Window>("WindowCSX", x, y, 390, 300, MyGUI::Align::Default, "Overlapped");
window->eventWindowButtonPressed += MyGUI::newDelegate(this, &DemoKeeper::notifyWindowPressed);

动作响应:(函数为啥有2个参数,传参数怎么弄的)

void DemoKeeper::notifyWindowPressed(MyGUI::Window* _widget, const std::string& _name)
{
MyGUI::WindowPtr window = _widget->castType<MyGUI::Window>();
if (_name == "close") window->destroySmooth();
else if (_name == "minimized") {
// hide window and show button in your taskbar
}
else if (_name == "maximized") {
// maximized window
}
}


HowTo use delegates

应用委托,必须有一个信号。( 特殊窗口已经定义的信号,需要查询说明文档。)

定义事件信号:

/** Event : Mouse button pressed and released.\n
signature : void method(MyGUI::Widget* _sender)
@param _sender widget that called this event
*/
EventHandle_WidgetVoid eventMouseButtonClick;


委托函数在相同类中(委托函数中只有一个参数):

class Test
{
public:
void mousePressed(MyGUI::Widget* _widget)
{
// ...
}

void main()
{
MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main");
button->eventMouseButtonClick = MyGUI::newDelegate(this, &Test::mousePressed);
}
}

其他还可以:

——委托函数在不同的类中:

button->eventMouseButtonClick = MyGUI::newDelegate(this, &Child::mousePressed);


——委托函数是全局函数:

button->eventMouseButtonClick = MyGUI::newDelegate(mousePressed);

——委托函数是静态函数:

button->eventMouseButtonClick = MyGUI::newDelegate(Test::mousePressed);


HowTo control widgets [create, find, destroy, etc.]

一、创建(手动的):

——创建一个没有父窗口的窗口

MyGUI::Gui::getInstance().createWidget<MyGUI::widget_type>("skin_name", x, y, w, h, MyGUI::Align, "layer_name"[, "widget_name"]);

MyGUI::Gui::getInstance().createWidgetReal<MyGUI::widget_type>("skin_name", x_r, y_r, w_r, h_r, MyGUI::Align, "layer_name"[, "widget_name"]);


——创建一个有父窗口的窗口

parent_ptr->createWidget<MyGUI::widget_type>("skin_name", x, y, w, h, MyGUI::Align [, "widget_name"]);
parent_ptr->createWidgetReal<MyGUI::widget_type>("skin_name", x_r, y_r, w_r, h_r, MyGUI::Align [, "widget_name"]);


其中:

align的值在align table中可以找到。

layer_namestandard layers.中可以找到。

二、查找

——查找一个窗口(例如按钮)

MyGUI::Button* button = MyGUI::Gui::getInstance().findWidget<MyGUI::Button>("button_name");


——不关心窗口类型的查找

MyGUI::Widget* any_widget = MyGUI::Gui::getInstance().findWidgetT("widget_name");

三、删除窗口

删除窗口需要从widget_ptr中获得的指针,然后代码:

MyGUI::Gui::getInstance().destroyWidget(widget_ptr);


如果没有指针,需要通过窗口名称查找:

MyGUI::Widget* widget = MyGUI::Gui::getInstance().findWidgetT("widget_name");

MyGUI::Gui::getInstance().destroyWidget(widget);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: