GTK之任意拖动窗口中的按钮
一,任意拖动窗口中的按钮
源码:
#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之任意拖动窗口中的按钮相关推荐
- 在PYQT5中,点击主窗口中的按钮,弹出子窗口
目录 例1: 例2: 例3: 例4: 需求: 在PYQT5中,点击主窗口中的按钮,弹出子窗口. 测试代码: 例1: from PyQt5.QtWidgets import * import syscl ...
- 2.在窗口中添加按钮
按钮控件 如何创造一个按钮? 直接创建对象 创建相应的指针,分配内存. 内存回收机制 自动回收 从零开始创建带按钮的界面 按钮控件 //头文件 #ifndef MYWIDGET_H #define M ...
- java jframe添加按钮_JFrame窗口中如何加按钮啊?(JDK)
JFrame窗口中如何加按钮啊?(JDK) 我在JFrame窗口中加入按钮,不成功,有人说在JFrame 中加按钮不好,可是我要在窗口中用按钮,我该如何做?在Frame中加按钮也行!请大侠提示!--- ...
- iOS 9应用开发教程之ios9中实现按钮的响应
iOS 9应用开发教程之ios9中实现按钮的响应 IOS9实现按钮的响应 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应:另一 ...
- MFC父窗口中加入一个子窗口
参考博客: MFC 在父对话框中内嵌子对话框 MFC实现子对话框间切换 ####具体操作 新建对话子窗口IDD_SUB_DEPLOY 1)."Style"选择"Child ...
- python作业.创建两个文本框,一个按钮。第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符;第 2 个文本框绑定<a>键事件,敲击键盘 a 字符,在交互窗口中显示 10
""" 创建两个文本框,一个按钮. 第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符: 第 2 个文本框绑定<a>键事件,敲击键 ...
- 创建两个文本框,一个按钮。第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符;
创建两个文本框,一个按钮.第 1 个文本框绑定任意键事件,敲击键盘任意可显示字符,在交互窗口中显示该字符:第 2 个文本框绑定键事件,敲击键盘 a 字符,在交互窗口中显示 10 个'a'字符:按钮绑定 ...
- flutter 拖拽布局_使用Flutter模仿SOUL可任意拖动的悬浮按钮
在Flutter中,我们可以两种方式实现小部件对拖动效果 GestureDetector() Draggable() GestureDetector 在开发过程中经常使用到GestureDetecto ...
- win10系统文件拖拽卡顿_win10电脑中鼠标拖动窗口有延迟如何解决
在win10系统中,有时候会使用鼠标来拖动窗口操作文件,然而有时候会遇到鼠标拖动窗口有延迟.卡顿的情况,这样操作就很不方便了,接下来就为大家讲解一下win10电脑中鼠标拖动窗口有延迟的具体解决步骤. ...
最新文章
- Linux之tmpwatch命令
- 逆误差函数:torch.erfinv
- sql语句性能优化【转载】
- Android--近来学习总结(2017/3/27)
- 贝叶斯神经网络对梯度攻击的鲁棒性
- Mysql中使用命令行导入.sql文件新建数据库表(图文)
- IntelliJ IDEA for Mac 文件结构侧边窗口/类文件内部结构(File Structure)
- selenium python 文本框输入信息_selenium python向富文本框中输入内容
- Docker JDK镜像
- sql server数据库《音乐网站》项目歌曲管理模块
- Spring+SpringMVC+MyBatis+JQ+BootStrap练习
- 电脑只能上微信不能打开网页_怎么回事?我的电脑浏览器打不开网页,但微信、QQ却又能用?...
- 什么是聚集索引和非聚集索引 ( 或者聚簇索引和非聚簇索引 )
- 怎么卸载quartus_分享一个Quartus工程清理方法
- 8个国外开放的硕博论文、期刊、数据库下载网站-转
- ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies
- [ZT]狄马:老子与美国南北战争
- 在家用手机怎么赚钱?赚钱的秘密就在这里!
- 机器学习的所有资源链接和经验教训(五)ML技术讲座
- 大数据数据科学家常用面试题_想要成为数据科学家,解决数据科学面试的简单指南...
热门文章
- C++/C--NULL与nullptr【转载】
- EFI模式下安装win8.1系统
- 字符串匹配——BMH算法
- XML编程-DOM4J
- 面试项目亮点_程序员面试时这样介绍自己的项目经验,等于成功了一大半
- 树莓派python界面编程_玩转树莓派-RaspBerry,使用Python开发定制界面
- 网络服务器监测系统,网络服务器监测系统研究与开发
- 使用 做签名的post_腾讯IMWeb团队是如何使用 NodeJS 实现 JWT 原理
- wps vba模块压缩包_01_创建第一个VBA小程序:你好,世界
- httpf发送 json_Java发送http请求发送json对象