GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 3116|回复: 4

各位大神,求教啊 关于GtkWidget对象window属性调用问题。。

[复制链接]
  • TA的每日心情
    无聊
    2012-11-4 09:32
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-5-17 22:58:43 | 显示全部楼层 |阅读模式
    我这是linux上的gtk3.4版本 例子是<The Foundations of GTK+ Development>里面的Event Boxes
    其中有这么一句gdk_window_set_cursor(eventBox->window, gdk_cursor_new(GDK_HAND1));
    编译命令是gcc `pkg-config --cflags --libs gtk+-3.0`
    编译时提示GtkWidget下没有window成员 可是我在帮助文档下确实找到GtkWidget下有window这个这个属性啊
    看了网上很多教程也是这样调用window的啊 怎么回事啊 求教!!!!
    下面是源码:

    #include <gtk/gtk.h>
    static gboolean button_pressed(GtkWidget *, GdkEventButton *, GtkLabel *);
    int main(int argc, char *argv[])
    {
         GtkWidget *window, *eventBox, *label;
         gtk_init(&argc, &argv);
         window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
         gtk_window_set_title(GTK_WINDOW(window), "Event Box");
         gtk_container_set_border_width(GTK_CONTAINER(window), 10);
         gtk_widget_set_size_request(window, 200, 50);

         eventBox = gtk_event_box_new();
         label = gtk_label_new("Double-Clicked Me!");
         gtk_event_box_set_above_child(GTK_EVENT_BOX(eventBox), FALSE);

         g_signal_connect(G_OBJECT(eventBox), "button_press_event",
                     G_CALLBACK(button_pressed), (gpointer)label);
         gtk_container_add(GTK_CONTAINER(eventBox), label);
         gtk_container_add(GTK_CONTAINER(window), eventBox);
         gtk_widget_set_events(eventBox, GDK_BUTTON_PRESS_MASK);
         gtk_widget_realize(eventBox);

    /*下面这一句错误event->window 编译提示GtkWidget 没有window成员
       但是我查看GtkWidget类的成员确实发现有window属性啊*/
         gdk_window_set_cursor(eventBox->window, gdk_cursor_new(GDK_HAND1));
         gtk_widget_show_all(window);

         gtk_main();
         return 0;
    }

    static gboolean button_pressed(GtkWidget *eventbox, GdkEventButton *event,
                 GtkLabel *label)
    {
          if(event->type == GDK_2BUTTON_PRESS)
         {
             const gchar *text = gtk_label_get_text(label);
             if(text[0] == 'D')
               gtk_label_set_text(label, "I was double-clicked!");
             else
               gtk_label_set_text(label, "Double clicked me again");
         }
         return FALSE;
    }
  • TA的每日心情
    无聊
    2012-11-4 09:32
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2012-5-17 22:59:44 | 显示全部楼层
    求教啊
  • TA的每日心情
    奋斗
    2016-10-11 09:20
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-5-18 19:07:45 | 显示全部楼层
    你试试gtk_widget_get_window 这个函数来获取window。
  • TA的每日心情
    无聊
    2012-11-4 09:32
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2012-5-18 22:20:19 | 显示全部楼层

    回 ACTom 的帖子

    ACTom:你试试gtk_widget_get_window 这个函数来获取window。 (2012-05-18 19:07) 
    果然如此 犀利啊! 本来还想翻墙来着 没必要了 受教了 谢谢咯~~

    该用户从未签到

    发表于 2012-5-18 23:00:51 | 显示全部楼层

    回 yuanjq91 的帖子

    yuanjq91: 求教啊 (2012-05-17 22:59) 
    看了code
    typedef struct _GtkWidget              GtkWidget;
    struct _GtkWidget
    {
      GInitiallyUnowned parent_instance;

      GtkWidgetPrivate *priv;
    };
    看来gtk3里很多结构成员变成真的必须用方法访问的“property”
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-5-2 12:12 , Processed in 0.129689 second(s), 8 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表