当前位置:  技术问答>linux和unix

GTK+鼠标事件问题

    来源: 互联网  发布时间:2017-01-04

    本文导语:  #include  #include    #define TEST_W 100 #define TEST_H 80   gboolean drag = FALSE;   // 只在左键按下时拖动窗体 int nX = 0; int nY = 0;   static gint button_press_event(GtkWidget * widget,           GdkEventButton * event, gpointer dat...


#include 

#include 

 

#define TEST_W 100

#define TEST_H 80

 

gboolean drag = FALSE;   // 只在左键按下时拖动窗体

int nX = 0;

int nY = 0;

 

static gint button_press_event(GtkWidget * widget,

          GdkEventButton * event, gpointer data)

{

        if (event->button == 1)       // 判断是否左键按下

        {

                 drag = TRUE;

                 nX = event->x;  // 取得鼠标相对于窗口的位置

                 nY = event->y;

        }

        return TRUE;

}

 

static gint button_release_event(GtkWidget * widget, GdkEventButton * event,

          gpointer data)         // 鼠标抬起事件

{

        if (event->button == 1)

                 drag = FALSE;

        return TRUE;

}

 

static gint motion_notify_event(GtkWidget * widget, GdkEventButton * event,

          gpointer data)         // 鼠标移动事件

{

        if (drag)

        {

                 int x, y;

                 GtkWidget *window = (GtkWidget *) data;

                 gtk_window_get_position((GtkWindow *) window, &x, &y);         // 取窗体绝对坐标

                 gtk_window_move((GtkWindow *) window, x + event->x - nX, //x是当前窗口的绝对坐标,event->x是鼠标相对窗口的x坐标, nX是鼠标按下时记录的坐标,这三个量都是不变的,,窗口怎么会移动呢????
                                              

                             y + event->y - nY);// 移动窗体

        }

        return TRUE;

}

 

int main(int argc, char **argv)

{

        GtkWidget *window;

 

        gtk_init(&argc, &argv);

 

        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

        gtk_window_set_decorated(GTK_WINDOW(window), FALSE);   // 去掉边框

        gtk_widget_set_size_request(window, TEST_W, TEST_H);

 

        gtk_widget_set_events(window,  // 设置窗体获取鼠标事件

                   GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK

                   | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK

                   | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);

        gtk_signal_connect(GTK_OBJECT(window), "button_press_event",

                   (GtkSignalFunc) button_press_event, window);       // 加入事件回调

        gtk_signal_connect(GTK_OBJECT(window), "motion_notify_event",

                   (GtkSignalFunc) motion_notify_event, window);

        gtk_signal_connect(GTK_OBJECT(window), "button_release_event",

                   (GtkSignalFunc) button_release_event, window);

 

        gtk_widget_show_all(window);

        gtk_main();

        return TRUE;

}




|
 nX是鼠标按下时 相对于 你连接信号的控件的坐标,也就是鼠标相对于window的坐标,x + event->x - nX不等于零,所以移动了吧

    
 
 

您可能感兴趣的文章:

  • gtk中怎么响应鼠标双击事件呀??
  • gtk 鼠标motion事件捕获
  • 在gtk 中如何屏蔽鼠标双击事件
  • GTK 里面如何捕获鼠标移动事件???????????
  • gtk怎样将鼠标隐藏
  • GTK编程,如何设置及获取鼠标滚动条滚动事件
  • gtk中的鼠标事件处理?
  • gtk+中鼠标移动到button上触发什么事件
  • gtk中的TextView里面用鼠标选中一段字符后怎样将选中的字符串放到剪切板里面?
  • 用GTK如何用键盘代替鼠标?
  • gtk keypressevent 为什么会捕获到鼠标button消息?
  • 关于Gtk treeview的事件问题。
  • 【gtk】关于gtk布局问题 iis7站长之家
  • GTK+问题:delete_event到底是信号还是事件?
  • 【GTK】Treeview -- 如果获取在column header上的右键事件?
  • 如何让GTK+ 的控件响应 mouse move事件?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 【重要】gtk+ 编译gtk+的问题,不同于一般gtk的搭建--1000分,问题解决了,开号给分,决不食言!大家都来看看
  • 关于gtk的目录问题,我的目录是 gtk-2.0/gtk/gtk.h ??
  • Redhat linux9.0 下Gtk+编程的#include <gtk/gtk.h>问题
  • [GTK] gtk最小化问题与恢复问题
  • gtk for win 和 gtk for linux 下的程序问题?
  • GTK+ gtk_tree问题
  • 【gtk+】初学gtk+,请教一个问题
  • 【gtk】关于gtk布局问题
  • 关于GTK中gtk_widget_hide()的问题
  • gtk编程问题,如何在一个线程中向gtk控件发送一个expose_event消息
  • gtk编程中关于gtk_widget_show函数的问题
  • 新手问题:gtk+-2.0.0.tar.gz和gtk+-2.0.0.tar.bz2这两个文件是什么关系啊?
  • gtk+编译没有问题,运行的时候出问题,就是这句gtk_widget_show_all(window);请各位帮忙解答,谢谢
  • GTK 界面编程有问题,求解
  • gtk的问题.
  • gtk问题!
  • GTK编译问题.
  • gtk 窗口模式 怪问题(100分)
  • GTK编程问题
  • gtk+2.0安装问题
  • gtk 和 gtk+ 有什么区别?
  • centos5.4中安装gtk时,yum库最新版是gtk2.10,如何更新yum库安装gtk2.12
  • 我使用GTK+2.0写界面程序时,怎么找不到gtk.h文件?
  • GTK窗口前端显示及GTK窗口闪烁
  • 用GTK开发的程序如何在没有GTK动态连接库的Linux里运行?
  • 【GTK】GTK中有没有这个widget?
  • 我想学习GTK+2.0,请问如何准备GTK编程环境???
  • 本人刚学gtk编程,留下油箱,欢迎喜欢gtk编程的朋友和我交流啊!!!!
  • 大家好,想知道gtk与gtk+有什么区别?
  • gtk中如何获取gtk_text_view中的输入内容?
  • GTK+中类似gtk_hbox_new这样的给构件分配内存的函数 为什么不用手动释放?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3