MyGUI 委托
为了将你的函数用作一个委托delegate,你必须使它有一个特殊的签名。你可在事件声明附近找到事件的签名,或者在文档中找指定的窗口部件widget、在WidgetEvent类文档中找公共的事件。例如对eventMouseButtonClick:(MyGUI_WidgetInput.h文件里有部分定义)
To use your function as a delegate, you must have a specific signature for it. You can find the event signatures near the event declaration or indocumentation for specific widgets and in theWidgetEvent class documentation for common events. For example, for eventMouseButtonClick :
/** 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); } }
父类成员函数
class Parent { public: void mousePressed(MyGUI::Widget* _widget) { // ... } }; class Child : public Parent { void main() { MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main"); #ifdef OGRE_COMPILER_MSVC button->eventMouseButtonClick = MyGUI::newDelegate(static_cast<Parent *>(this), &Parent::mousePressed); #else // Visual Studio fails with error C2660: 'MyGUI::newDelegate' : function does not take 2 arguments // using this variant. button->eventMouseButtonClick = MyGUI::newDelegate(this, &Child::mousePressed); #endif } }
其他类成员函数
class Test { public: void mousePressed(MyGUI::Widget* _widget) { // ... } } class Main { public: void main() { MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main"); Test test; button->eventMouseButtonClick = MyGUI::newDelegate(&test, &Test::mousePressed); // or Test * test2 = new Test(/*...*/); button->eventMouseButtonClick = MyGUI::newDelegate(test2, &Test::mousePressed); } }
全局函数
void mousePressed(MyGUI::Widget* _widget) { // ... } class Main { public: void main() { MyGUI::Button* button = mGUI->createWidget<MyGUI::Button>("Button", 10, 10, 300, 26, MyGUI::Align::Default, "Main"); button->eventMouseButtonClick = MyGUI::newDelegate(mousePressed); } }
任意类的静态成员函数(同类或其他类)
class Test { public: // static function static 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(Test::mousePressed); } }