您的位置:首页 > 其它

如何将GTK+-2.0的信号、回调处理映射成类成员函数的调用--示例

2013-05-02 16:39 447 查看
1 #ifndef __UI_TEST_WIN__
2 #define __UI_TEST_WIN__
3
4 #include "BaseObject.hpp"
5 #include <gtk/gtk.h>
6
7 class TestDialog: public BaseObject
8 {
9 public:
virtual ~TestDialog() {};
virtual gulong setupObject();

protected:
GtkWidget *calendar1;

virtual SIGNAL_CALLBACK gulong OnOk();
};

#endif

1 #include "ui_testwin.hpp"
2
3 gulong TestDialog::setupObject()
4 {
5 GtkWidget* window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
6 gtk_window_set_title (GTK_WINDOW (window1), "window1");
7
8 ConnectSignal(G_OBJECT (window1), "destroy", reinterpret_cast<CommonCallback>(&TestDialog::OnOk));
9
calendar1 = gtk_calendar_new ();
gtk_widget_show (calendar1);
gtk_container_add (GTK_CONTAINER (window1), calendar1);
gtk_calendar_display_options (GTK_CALENDAR (calendar1),
GtkCalendarDisplayOptions( GTK_CALENDAR_SHOW_HEADING
| GTK_CALENDAR_SHOW_DAY_NAMES
| GTK_CALENDAR_SHOW_WEEK_NUMBERS));

/* Store pointers to all widgets, for use by lookup_widget(). */
//GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
//GLADE_HOOKUP_OBJECT (window1, calendar1, "calendar1");
gtk_widget_show(window1);

/* 存放对象的基类指针 */
x_pObject = (GObject*)window1;

return 0;
}

gulong TestDialog::OnOk()
{
gtk_main_quit();
return 0;
}

int main (int argc, char *argv[])
{
TestDialog* lpDialog = NULL;

gtk_init (&argc, &argv);

lpDialog = new TestDialog;
lpDialog->setupObject();

gtk_main ();

delete lpDialog;
}

在windows上调试时发现在调用OnOk时,如果带参数会有段错误,经检查,是函数调用规则导致,因此所有的事件处理函数应增加__cdecl关键字
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐