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

 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:
10       virtual ~TestDialog() {};
11       virtual gulong setupObject();
12  
13   protected:
14      GtkWidget *calendar1;
15    
16       virtual SIGNAL_CALLBACK gulong OnOk();
17  };
18  
19   #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  
10      calendar1 = gtk_calendar_new ();
11      gtk_widget_show (calendar1);
12      gtk_container_add (GTK_CONTAINER (window1), calendar1);
13      gtk_calendar_display_options (GTK_CALENDAR (calendar1),
14                                   GtkCalendarDisplayOptions( GTK_CALENDAR_SHOW_HEADING
15                                           | GTK_CALENDAR_SHOW_DAY_NAMES
16                                           | GTK_CALENDAR_SHOW_WEEK_NUMBERS));
17  
18       /*  Store pointers to all widgets, for use by lookup_widget().  */
19       // GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
20        // GLADE_HOOKUP_OBJECT (window1, calendar1, "calendar1");
21       gtk_widget_show(window1);
22      
23       /*  存放对象的基类指针  */
24      x_pObject = (GObject*)window1;
25      
26       return  0;
27  }
28  
29  gulong TestDialog::OnOk()
30  {
31      gtk_main_quit();
32       return  0;
33  }
34  
35   int main ( int argc,  char *argv[])
36  {
37      TestDialog* lpDialog = NULL;
38  
39      gtk_init (&argc, &argv);
40  
41      lpDialog =  new TestDialog;
42      lpDialog->setupObject();
43      
44      gtk_main ();
45  
46      delete lpDialog;
47  }

 

 在windows上调试时发现在调用OnOk时,如果带参数会有段错误,经检查,是函数调用规则导致,因此所有的事件处理函数应增加__cdecl关键字

 

你可能感兴趣的:(gtk)