c - 如何检测鼠标点击 GTK+ 中的图像?

标签 c gtk mouse

我正在使用 gtk+ 2.0 在 C 中开发一个项目。

我必须检查用户是否在图像上按下了左键。我想在按下左键单击时调用一个函数并获取鼠标的位置,但我该怎么做?

最佳答案

我希望我可以假设您知道如何将事件连接到小部件,但如果不知道:这是我之前的一个回答,演示了如何做到这一点。

g_signal_connect for right mouse click?

如您所见,事件作为 GdkEventButton * 传递(event 从现在开始)。此结构具有您要查找的成员字段:event->xevent->y 都是 gdouble 字段。

无论如何,@unwind 是对的。正如 GTK 文档明确指出的那样:

GtkImage is a “no window” widget (has no GdkWindow of its own), so by default does not receive events. If you want to receive events on the image, such as button clicks, place the image inside a GtkEventBox, then connect to the event signals on the event box.

GtkImage 不是唯一的“无窗口” 小部件,顺便说一句。例如,GtkLabel 如果您想处理标签上的点击,则需要类似的方法。无论如何:More info here .
然后手册页继续提供完整代码示例,说明如何处理对 GtkImage 小部件的点击。只需查找标题“Handling button press events on a GtkImage.” 即可获得完整解释,但以下是防止链接中断的代码:

static gboolean
button_press_callback (GtkWidget      *event_box,
                       GdkEventButton *event,
                       gpointer        data)
{
    g_print ("Event box clicked at coordinates %f,%f\n",
         event->x, event->y);

    // Returning TRUE means we handled the event, so the signal
    // emission should be stopped (don’t call any further callbacks
    // that may be connected). Return FALSE to continue invoking callbacks.
    return TRUE;
}

static GtkWidget*
create_image (void)
{
    GtkWidget *image;
    GtkWidget *event_box;

    image = gtk_image_new_from_file ("myfile.png");

    event_box = gtk_event_box_new ();

    gtk_container_add (GTK_CONTAINER (event_box), image);

    g_signal_connect (G_OBJECT (event_box),
                  "button_press_event",
                  G_CALLBACK (button_press_callback),
                  image);

    return image;
}

关于c - 如何检测鼠标点击 GTK+ 中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386412/

相关文章:

mysql - 从 C 语言将 16 位整数数组插入 MySQL

c - GTK+ 2.0 动态数组

python - 如何使按钮图像拉伸(stretch)、透明、宽度高度完全缩放适合?

c - 在 C & GLUT 中获取用户鼠标点击的位置

javascript - 单击 Canvas 中的某个区域时如何运行特定功能

java - 如何向 JTree 添加鼠标监听器,以便我可以在将鼠标悬停在节点上时更改光标(变为手形光标)?

objective-c - 如何从 C 中的控制台接受 "only characters"或 "only digits"?

CPU缓存抑制

c - 另一个数组中的安全用户输入(任何类型)

python - 查看 PDF 的问题