一,任意拖动窗口中的按钮

源码:

#include <gtk/gtk.h> GtkWidget *window; GtkWidget *fixed; GtkWidget *button; gboolean drag = FALSE; // 只在左键按下时拖动窗体 gint nX = 0; gint nY = 0; void destroy(GtkWidget *widget, gpointer *data) { gtk_main_quit(); } 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; // gtk_fixed_move(GTK_FIXED(fixed),button,event->x,event->y);/*移动按纽*/ return TRUE; } static gint motion_notify_event(GtkWidget * widget, GdkEventButton * event,gpointer data) // 鼠标移动事件 { if (drag) { //gint x, y; //GtkWidget *window = (GtkWidget *) data; //gtk_window_get_position((GtkWindow *)window, &x, &y); // 取窗体绝对坐标 gtk_fixed_move(GTK_FIXED(fixed),button,widget->allocation.x + event->x - nX,widget->allocation.x + event->y - nY);/*移动按纽*/ // g_print("x=%d;y=%d\n",x + event->x - nX,y + event->y - nY); //gtk_fixed_move(GTK_FIXED(fixed),button,event->x , event->y);/*移动按纽*/ //gtk_window_move((GtkWindow *) window, x + event->x - nX, y + event->y - nY);// 移动窗体 } return TRUE; } int main(int argc, char *argv[]) { gtk_init(&argc,&argv);//初始化 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (window), "destroy",(GtkSignalFunc) destroy, NULL); gtk_window_set_title (GTK_WINDOW (window), "button_drag"); //gtk_window_fullscreen(GTK_WINDOW(window)); fixed = gtk_fixed_new();//函数用于创建新的固定容器 gtk_container_add(GTK_CONTAINER(window), fixed); button=gtk_button_new_with_label("Button"); /*创建带标号的按钮*/ //gtk_container_add(GTK_CONTAINER(window),button); /*把按钮加入窗体*/ gtk_fixed_put(GTK_FIXED(fixed), button, 50, 50);//函数将widget放在fixed的由x和y指定的位置。 gtk_widget_set_size_request(button, 80, 35); // 设置按钮获取鼠标事件 gtk_widget_set_events(button, 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(button), "button_press_event",(GtkSignalFunc) button_press_event, window); // 加入事件回调 gtk_signal_connect(GTK_OBJECT(button), "button_release_event",(GtkSignalFunc) button_release_event, window); gtk_signal_connect(GTK_OBJECT(button), "motion_notify_event",(GtkSignalFunc) motion_notify_event, window); gtk_widget_show_all(window); gtk_main (); return 0; }

转载于:https://www.cnblogs.com/tianshuai11/archive/2011/12/25/2477213.html

GTK之任意拖动窗口中的按钮相关推荐

  1. 在PYQT5中,点击主窗口中的按钮,弹出子窗口

    目录 例1: 例2: 例3: 例4: 需求: 在PYQT5中,点击主窗口中的按钮,弹出子窗口. 测试代码: 例1: from PyQt5.QtWidgets import * import syscl ...

  2. 2.在窗口中添加按钮

    按钮控件 如何创造一个按钮? 直接创建对象 创建相应的指针,分配内存. 内存回收机制 自动回收 从零开始创建带按钮的界面 按钮控件 //头文件 #ifndef MYWIDGET_H #define M ...

  3. java jframe添加按钮_JFrame窗口中如何加按钮啊?(JDK)

    JFrame窗口中如何加按钮啊?(JDK) 我在JFrame窗口中加入按钮,不成功,有人说在JFrame 中加按钮不好,可是我要在窗口中用按钮,我该如何做?在Frame中加按钮也行!请大侠提示!--- ...

  4. iOS 9应用开发教程之ios9中实现按钮的响应

    iOS 9应用开发教程之ios9中实现按钮的响应 IOS9实现按钮的响应 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应:另一 ...

  5. MFC父窗口中加入一个子窗口

    参考博客: MFC 在父对话框中内嵌子对话框 MFC实现子对话框间切换 ####具体操作 新建对话子窗口IDD_SUB_DEPLOY 1)."Style"选择"Child ...

  6. python作业.创建两个文本框,一个按钮。第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符;第 2 个文本框绑定<a>键事件,敲击键盘 a 字符,在交互窗口中显示 10

    """ 创建两个文本框,一个按钮. 第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符: 第 2 个文本框绑定<a>键事件,敲击键 ...

  7. 创建两个文本框,一个按钮。第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符;

    创建两个文本框,一个按钮.第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符:第 2 个文本框绑定键事件,敲击键盘 a 字符,在交互窗口中显示 10 个'a'字符:按钮绑定 ...

  8. flutter 拖拽布局_使用Flutter模仿SOUL可任意拖动的悬浮按钮

    在Flutter中,我们可以两种方式实现小部件对拖动效果 GestureDetector() Draggable() GestureDetector 在开发过程中经常使用到GestureDetecto ...

  9. win10系统文件拖拽卡顿_win10电脑中鼠标拖动窗口有延迟如何解决

    在win10系统中,有时候会使用鼠标来拖动窗口操作文件,然而有时候会遇到鼠标拖动窗口有延迟.卡顿的情况,这样操作就很不方便了,接下来就为大家讲解一下win10电脑中鼠标拖动窗口有延迟的具体解决步骤. ...

最新文章

  1. Linux之tmpwatch命令
  2. 逆误差函数:torch.erfinv
  3. sql语句性能优化【转载】
  4. Android--近来学习总结(2017/3/27)
  5. 贝叶斯神经网络对梯度攻击的鲁棒性
  6. Mysql中使用命令行导入.sql文件新建数据库表(图文)
  7. IntelliJ IDEA for Mac 文件结构侧边窗口/类文件内部结构(File Structure)
  8. selenium python 文本框输入信息_selenium python向富文本框中输入内容
  9. Docker JDK镜像
  10. sql server数据库《音乐网站》项目歌曲管理模块
  11. Spring+SpringMVC+MyBatis+JQ+BootStrap练习
  12. 电脑只能上微信不能打开网页_怎么回事?我的电脑浏览器打不开网页,但微信、QQ却又能用?...
  13. 什么是聚集索引和非聚集索引 ( 或者聚簇索引和非聚簇索引 )
  14. 怎么卸载quartus_分享一个Quartus工程清理方法
  15. 8个国外开放的硕博论文、期刊、数据库下载网站-转
  16. ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies
  17. [ZT]狄马:老子与美国南北战争
  18. 在家用手机怎么赚钱?赚钱的秘密就在这里!
  19. 机器学习的所有资源链接和经验教训(五)ML技术讲座
  20. 大数据数据科学家常用面试题_想要成为数据科学家,解决数据科学面试的简单指南...

热门文章

  1. C++/C--NULL与nullptr【转载】
  2. EFI模式下安装win8.1系统
  3. 字符串匹配——BMH算法
  4. XML编程-DOM4J
  5. 面试项目亮点_程序员面试时这样介绍自己的项目经验,等于成功了一大半
  6. 树莓派python界面编程_玩转树莓派-RaspBerry,使用Python开发定制界面
  7. 网络服务器监测系统,网络服务器监测系统研究与开发
  8. 使用 做签名的post_腾讯IMWeb团队是如何使用 NodeJS 实现 JWT 原理
  9. wps vba模块压缩包_01_创建第一个VBA小程序:你好,世界
  10. httpf发送 json_Java发送http请求发送json对象