VC2005使用GTK+(4)

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在设计界面

的时候默认让窗体不可绘图,只要把窗体绘图设置为可以绘图就可以了。

你可能感兴趣的:(object,gcc,null,callback,Signal,gtk)