找回密码
 注册
查看: 2193|回复: 12

怎样获得当前鼠标的坐标?

[复制链接]
发表于 2005-12-17 17:18:11 | 显示全部楼层 |阅读模式
哪位兄弟知道:用什么函数(API)可以获得当前鼠标绝对坐标?不管显示器当前在执行什么应用!
谢谢!
发表于 2005-12-19 10:46:48 | 显示全部楼层
gdk_display_get_pointer ()
回复

使用道具 举报

 楼主| 发表于 2005-12-19 23:30:09 | 显示全部楼层
感谢大哥指点!
在问一下:我要设计一个程序,它是独立于其他任何进程,比如当前桌面可能运行一个图象/图形应用.我需要随时知道鼠标移动到哪个位置了.采用这个函数时候不需要打开一个所谓"screen"吗?
回复

使用道具 举报

发表于 2005-12-20 12:28:25 | 显示全部楼层
gdk_display_get_pointer () 和XQueryPointer()都可以,其实前者就是通过调用后者来实现的。
不过gdk_display_get_pointer () 依赖于gtk2。
gtk2的screen可以通过gdk_display_get_screen()得到
回复

使用道具 举报

 楼主| 发表于 2005-12-20 18:51:01 | 显示全部楼层
谢谢两位大哥。
小弟初步学习GTK,看了两位的建议收益多多。搜索GTK,相关函数实在多,一下子不知道从哪里进入。想来想去,再有几个问题请教:
1、red hat 多少版本的带有GTK2?没有的话哪里下载?
2、gdk_display_open(const gchar *display_name)函数中参数 display_name 怎样设置?或设置什么?(我没有找到例子)
3、用gdk_display_get_default (void);函数行不行?
4、编译用 gcc myprog.c -o myprog -lgtk -lgdk 就可以了吗?


谢谢!
回复

使用道具 举报

发表于 2005-12-21 09:32:07 | 显示全部楼层
1.建议redhat9以上
2.gdk_display_open(NULL);就行了
3.可以
4.gtk1.2用:gcc myprog.c -o myprog `gtk-config --libs --cflags`,gtk2用:gcc myprog.c -o myprog `pkg-config gtk+-2.0 --libs --cflags`,光-lgtk -lgdk不够。
回复

使用道具 举报

 楼主| 发表于 2005-12-21 16:26:17 | 显示全部楼层
再次感谢上面大哥.遵照提示程序如下:

#include "gdk.h"

main()
{
      GdkDisplay *gdp;

       gdp = gdk_display_open(NULL);

        .....
        .....
}
----------------------------------------------------------
编译通过
但是运行出现"段错误"(在终端命令行运行)
换成
   gdp = gdk_display_get_default();

则 gdp==NULL,后面的程序就无法进行下去了!

我错在哪里?
1\是否需要安装及运行什么软件?
2\在gdk_display_get_default()之前需要什么函数?
3\另外,我发现事件类型和淹码不对应,怎样设置事件?(如GdkEventType对GdkEventMask)
回复

使用道具 举报

发表于 2005-12-21 16:28:50 | 显示全部楼层
先做gdk_init(NULL,NULL);
退出前做gdk_exit(NULL);
回复

使用道具 举报

 楼主| 发表于 2005-12-21 20:17:22 | 显示全部楼层
可以取得坐标位置了!

现在开始学习事件,怎样设置事件?

感谢论坛大哥!!
回复

使用道具 举报

发表于 2005-12-21 21:12:58 | 显示全部楼层
gtk?晚上找资料吧
回复

使用道具 举报

 楼主| 发表于 2005-12-22 09:09:51 | 显示全部楼层
用函数 gdk_display_get_event(GdkDisplay* );去读取事件

1、返回的事件类型是 GdkEventType 还是 GdkEventMask?
     比如键盘事件:GDK_KEY_PRESS 还是 GDK_KEY_PRESS_MASK?
     GDK_KEY_PRESS (=8)和GDK_KEY_PRESS_MASK(=1 << 10)的数值不一样
2、GDK_KEY_PRESS_MASK用在什么地方?
3、在函数gdk_display_get_event(GdkDisplay* );之前应该设置本程序需要的事件类型,用什么函数来设置?(不需要吗?)
4、函数gdk_display_get_event(GdkDisplay* );是否等待事件发生才返回?

研究一晚上资料,不得要领。谢谢版主。
回复

使用道具 举报

发表于 2005-12-22 09:55:33 | 显示全部楼层
1。MASK是事件掩码,也就是是否接收该事件。
2。gdk_window_set_events的第二个参数就是
3。正在探索。可能用gdk_window_set_events设置GDK_ROOT_PARENT()
4。马上返回,没事件就返回NULL。
我也还没搞定,目前只能得到部分事件。
回复

使用道具 举报

 楼主| 发表于 2005-12-23 07:13:07 | 显示全部楼层
大哥,关于X WINDOW和GTK/GDK的书太少了,只能在网络上找,也是残存补缺的,但是总比没有强。看了一些资料后。还是存在一些问题。

1、事件和信号说不一样,但是在资料上找不出具体的不一样,反而到处混说。本质区别是什么?
2、资料上介绍 g_signal_connect(或gtk_signal_connect())  和 gtk_widget_set_events() 配对使用。g_signal_connect() 可以和gdk_window_set_events() 配对使用吗?因为我的程序不需要WIDGET。
3、用gdk_window_set_events() 设置事件后,用 gdk_display_get_event() 去读取,键盘事件、鼠标移动没有反映,到是鼠标左右键压下有反映,但是取得的事件类型总是0xfffff。为什么呢?
4、在gtk2总等待事件发生只有 gtk_main() 吗?

谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-7 14:30 , Processed in 0.028365 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

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