如何将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关键字
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关键字
相关文章推荐
- 如何将GTK+-2.0的信号、回调处理映射成类成员函数的调用
- 如何将GTK+-2.0的信号、回调处理映射成类成员函数的调用--VC中测试(虚拟继承类及多继承)
- 如何将GTK+-2.0的信号、回调处理映射成类成员函数的调用--VC中测试(单类继承)
- 如何将GTK+-2.0的信号、回调处理映射成OOC虚拟成员函数的调用
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
- 使用套件示例@GTK+ 2.0 中文教程连载 现在我们已经介绍了难的办法,这里介绍怎样用 gtk_item_factory 调用来做。
- 信号处理程序中调用不可重入函数getpwnam 起结果是不可预见的。
- Linux开发调试经验整理(二)——信号处理函数陷阱:调用malloc导致死锁
- Linux 多线程应用中如何编写安全的信号处理函数
- 只有dll的情况下如何动态调用里面的类成员函数
- 如何从文本文件读取数据到二维数组,如何在函数处理后返回二维数组的示例
- Linux 多线程应用中如何编写安全的信号处理函数
- Linux 多线程应用中如何编写安全的信号处理函数(转载IBM)
- Linux 多线程应用中如何编写安全的信号处理函数
- Linux 多线程应用中如何编写安全的信号处理函数
- 静态成员函数如何调用非静态成员变量
- C++如何在派生类成员函数内调用基类的成员函数(包括构造函数)
- c++ 如何把this指针传入成员函数 像全局函数一样调用成员函数
- egg egg::E(100);静态成员(对象)是如何调用非静态的、私有的成员(构造)函数的呢?