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

先阅读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_name 在standard 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);


     

  • 你可能感兴趣的:(MyGUI 学习笔记(三)——MyGUI sample3——13.02.07)