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关键字

  • 相关阅读:
    服务器迁移总结
    使用OpenSSL生成证书
    mysql Event、存储过程、表命令
    负载均衡 > 常见问题
    SpringMVC记住密码功能
    spring mvc +cookie+拦截器功能 实现系统自动登陆
    android studio之argument for @notnull parameter 'name'
    jQuery ajax表单提交实现局部刷新
    Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法
    ajax表单提交全路径
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/3054904.html
Copyright © 2011-2022 走看看