gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:29:10 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com