zoukankan      html  css  js  c++  java
  • 如何将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关键字

  • 相关阅读:
    Randomization Tests
    关于Spring中的<context:annotationconfig/>配置
    PUT method support
    在对话框picture control中利用opengl进行绘图
    【学习笔记】《卓有成效的管理者》 第三章 我能贡献什么
    程序员的黄金时代
    nginx webdav配置
    iphone4s 如何强制关机
    并查集
    实战虚拟化存储设计之三MultiPathing
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/3054904.html
Copyright © 2011-2022 走看看