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

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 3255|回复: 1

gtk窗口拖动

[复制链接]
  • TA的每日心情
    奋斗
    2016-10-11 09:20
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2011-9-22 08:26:42 | 显示全部楼层 |阅读模式
    1.实现按下鼠标左键拖动窗口
    1>加入事件:

       
    1. gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
    复制代码


    2>关联信号与button按下的事件:

      
    1. g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(window_drag), NULL);
    复制代码


    3>窗口拖动事件的实现:
    1. gboolean window_drag(GtkWidget *widget, GdkEventButton *event, GdkWindowEdge edge)  
    2.     {  
    3.         if (event->button == 1)  
    4.         {  
    5.             gtk_window_begin_move_drag(GTK_WINDOW(gtk_widget_get_toplevel(widget)), event->button, event->  
    6.     x_root, event->y_root, event->time);  
    7.         }  
    8.          
    9.         return FALSE;  
    10. }
    复制代码
    注意这里:GTK+3中,第二个参数是GdkEvent,而不是GdkEventButton,所以,如果是GTK+3,那么请把所有的event->后面加上button.
    例如:event->button改成event->button.button


    2.使窗口不能移出桌面最左边,在标题栏显示当前窗口的位置坐标

    1>关联信号与事件:
    1. g_signal_connect(G_OBJECT(window), "configure-event", G_CALLBACK(window_move), NULL);
    复制代码


    2>窗口移动事件的实现:

    1. gboolean window_move(GtkWidget *widget, GdkEvent *event, gpointer data)  
    2.     {  
    3.         gint x, y;  
    4.         gchar buf[10] = {0};  
    5.         x = event->configure.x;  
    6.         y = event->configure.y;  
    7.         if (x <= 0)//如果窗口超出桌面最左边框  
    8.         {  
    9.             x = 0;  
    10.             gtk_window_move(GTK_WINDOW(widget), x, y);  
    11.         }  
    12.         sprintf(buf, "%d,%d", x, y);  
    13.         gtk_window_set_title(GTK_WINDOW(widget), buf);  
    14.         return TRUE;  
    15.     }
    复制代码

    该用户从未签到

    发表于 2012-3-7 15:13:26 | 显示全部楼层
    我在这里补充下,贴上个实例和大家分享下,以下是链接:鼠标拖动窗口
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

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

    我要啦免费统计

    GMT+8, 2024-11-1 10:28 , Processed in 0.023088 second(s), 8 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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