C 如何在按下鼠标按钮时打印连续消息(g_超时\u添加)?
我有以下代码:C 如何在按下鼠标按钮时打印连续消息(g_超时\u添加)?,c,gtk3,C,Gtk3,我有以下代码: #include <stdio.h> #include <gtk/gtk.h> #include <glib/gi18n.h> guint threadID = 0; guint serial_counter = 0; static gboolean serial_data (gpointer user_data) { printf("hello\n"); printf("counter: %d\n", serial_cou
#include <stdio.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
guint threadID = 0;
guint serial_counter = 0;
static gboolean
serial_data (gpointer user_data)
{
printf("hello\n");
printf("counter: %d\n", serial_counter);
serial_counter++;
return user_data;
}
static void
on_pressed (GtkButton* button, gpointer user_data)
{
if (user_data == 1)
{
threadID = g_timeout_add(250, serial_data, user_data);
}
else if (user_data == 0)
{
g_source_remove(threadID);
threadID = 0;
}
}
int
main (int argc, char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
GtkWidget *stop_button;
GtkWidget *box;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "test.c");
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
stop_button = gtk_button_new_with_label (_("Stop"));
gtk_box_pack_start (GTK_BOX (box), stop_button, FALSE, FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), box);
g_signal_connect (window, "button-press-event", G_CALLBACK (on_pressed), 1);
g_signal_connect (stop_button, "clicked", G_CALLBACK (on_pressed), 0);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
我只想在按下鼠标按钮(单击但未释放)时打印消息。这可以通过修改此代码来实现吗?
目标是在当前窗口的任何部分按下鼠标右键并打印一条消息,直到松开按钮。我不知道您从何处获得信号处理程序功能的声明。它应该根据不同的颜色看起来不同 这是一个简单的示例,我使用“按下”和“释放”事件来指示按钮状态,并根据状态相应地处理“鼠标移动”事件。 出于您的目的,您可以添加打印功能和计时器
static gboolean on_mouse_button_event(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
if (event->button.button != 3) // right button
return FALSE;
if (event->button.type == GDK_BUTTON_PRESS)
{
if (!button_pressed)
{
button_pressed = TRUE;
// Start timer
}
}
else if (event->button.type == GDK_BUTTON_RELEASE)
{
if (button_pressed)
{
button_pressed = FALSE;
// Stop timer
}
}
return TRUE;
}
...
g_signal_connect(G_OBJECT(widget), "button-press-event", G_CALLBACK(on_mouse_button_event), NULL);
g_signal_connect(G_OBJECT(widget), "button-release-event", G_CALLBACK(on_mouse_button_event), NULL);
我不知道你从哪里得到信号处理器函数的声明。它应该根据不同的颜色看起来不同 这是一个简单的示例,我使用“按下”和“释放”事件来指示按钮状态,并根据状态相应地处理“鼠标移动”事件。 出于您的目的,您可以添加打印功能和计时器
static gboolean on_mouse_button_event(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
if (event->button.button != 3) // right button
return FALSE;
if (event->button.type == GDK_BUTTON_PRESS)
{
if (!button_pressed)
{
button_pressed = TRUE;
// Start timer
}
}
else if (event->button.type == GDK_BUTTON_RELEASE)
{
if (button_pressed)
{
button_pressed = FALSE;
// Stop timer
}
}
return TRUE;
}
...
g_signal_connect(G_OBJECT(widget), "button-press-event", G_CALLBACK(on_mouse_button_event), NULL);
g_signal_connect(G_OBJECT(widget), "button-release-event", G_CALLBACK(on_mouse_button_event), NULL);
请在您的问题中包括已实现的输出。您的行为是什么?它与您想要的行为有何不同?您是否查找了
“按钮按下事件”
?您的签名看起来不正确。请在问题中包含已实现的输出。您的行为是什么?它与您想要的行为有何不同?您是否查找了“按钮按下事件”
?你的签名看起来不对。谢谢,我终于找到了解决方案。谢谢,我终于找到了解决方案。