VC2005使用GTK+(4)
2009-10-23 15:54
225 查看
1. 用glade-3制作的界面中,响应事件的时候,在运行时出现无法找到的问题:
libglade-WARNING **: could not find signal handler*************
查找网上的解决方案,在linux下gcc编译选项的问题,解决方案如下:
1, 在信号回调函数的前边加上G_MODULE_EXPORT
2, 在gcc编译选项中增加-rdynamic
但是在VC环境下怎么做呢?一直没有找到合适的解决办法。因此决定之后不用自动连接回调
函数的功能了,因此就要取消glade_xml_signal_autoconnect的调用。改用
g_signal_connect人工对信号和回调函数进行连接。
2. 在界面中绘图,不显示的问题
为了绘图,我给窗口增加了
g_signal_connect(G_OBJECT(window1),"configure-event",G_CALLBACK
(on_window1_configure_event),NULL);
g_signal_connect(G_OBJECT(window1),"expose-event",G_CALLBACK
(on_window1_expose_event),NULL);两个信号,分别在回调函数中绘图和显示
static GdkPixmap *pixmap = NULL;
static gint on_window1_expose_event(GtkWidget *widget,GdkEventExpose
*event,gpointer data)
{
gdk_draw_pixmap(widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
pixmap,
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height);
g_print("area.x=%d, area.y=%d/r/n",event->area.x,event->area.y);
g_print("area.width=%d, area.height=%d/r/n",event->area.width,event-
>area.height);
return FALSE;
}
static gint on_window1_configure_event(GtkWidget *widget,GdkEventConfigure
*event,gpointer data)
{
if (pixmap)
gdk_pixmap_unref(pixmap);
pixmap = gdk_pixmap_new(widget->window,
widget->allocation.width,
widget->allocation.height,
-1);
gdk_draw_line (pixmap,
widget->style->black_gc,
0, 0,
100,
100);
return TRUE;
}
不知道为什么,绘制的直线始终没能出来,好奇怪啊。终于找到原因了,是glade在设计界面
的时候默认让窗体不可绘图,只要把窗体绘图设置为可以绘图就可以了。
libglade-WARNING **: could not find signal handler*************
查找网上的解决方案,在linux下gcc编译选项的问题,解决方案如下:
1, 在信号回调函数的前边加上G_MODULE_EXPORT
2, 在gcc编译选项中增加-rdynamic
但是在VC环境下怎么做呢?一直没有找到合适的解决办法。因此决定之后不用自动连接回调
函数的功能了,因此就要取消glade_xml_signal_autoconnect的调用。改用
g_signal_connect人工对信号和回调函数进行连接。
2. 在界面中绘图,不显示的问题
为了绘图,我给窗口增加了
g_signal_connect(G_OBJECT(window1),"configure-event",G_CALLBACK
(on_window1_configure_event),NULL);
g_signal_connect(G_OBJECT(window1),"expose-event",G_CALLBACK
(on_window1_expose_event),NULL);两个信号,分别在回调函数中绘图和显示
static GdkPixmap *pixmap = NULL;
static gint on_window1_expose_event(GtkWidget *widget,GdkEventExpose
*event,gpointer data)
{
gdk_draw_pixmap(widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
pixmap,
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height);
g_print("area.x=%d, area.y=%d/r/n",event->area.x,event->area.y);
g_print("area.width=%d, area.height=%d/r/n",event->area.width,event-
>area.height);
return FALSE;
}
static gint on_window1_configure_event(GtkWidget *widget,GdkEventConfigure
*event,gpointer data)
{
if (pixmap)
gdk_pixmap_unref(pixmap);
pixmap = gdk_pixmap_new(widget->window,
widget->allocation.width,
widget->allocation.height,
-1);
gdk_draw_line (pixmap,
widget->style->black_gc,
0, 0,
100,
100);
return TRUE;
}
不知道为什么,绘制的直线始终没能出来,好奇怪啊。终于找到原因了,是glade在设计界面
的时候默认让窗体不可绘图,只要把窗体绘图设置为可以绘图就可以了。
相关文章推荐
- VC2005使用GTK+(1)
- VC2005使用GTK+(2)
- VC2005使用GTK+(3)
- VC2005使用GTK+(5)
- 使用C++处理JSON数据交换格式,附已经VC2005编译好的静态lib库
- 转载:使用感受: VC2005 VC6.0
- VC2005编译SQLite,生成WINCE上使用的DLL和Lib
- 使用VC2005 Express版时找不到msvcr80d.dll文件
- VC2005使用MSCOMM编写串口通讯程序
- VC2005使用boost
- VC2005中DateTimePicker控件的使用
- 使用VC2005 Express版时找不到msvcr80d.dll文件
- VC2005编译SQLite,生成WINCE上使用的DLL和Lib
- VC2005使用boost
- 【转帖】vc2005 使用Boost库的编译步骤.
- VC2005使用的一些问题及解决方法
- Vc2005使用心得
- vc2005 使用Boost库的编译步骤.
- 使用VC2005编译静态应用程序的方法
- VC2005使用boost