当前位置: 技术问答>linux和unix
用GTK如何用键盘代替鼠标?
来源: 互联网 发布时间:2016-07-13
本文导语: 我使用了gtk_window_add_accel_group和gtk_widget_add_accelerator这两个函数,按下键盘上的按键时确实能进入button_click的回调函数,但是按钮却没变化,没有按下和弹起的效果,和鼠标单击还不是完全一模一样,怎样才能实现用...
我使用了gtk_window_add_accel_group和gtk_widget_add_accelerator这两个函数,按下键盘上的按键时确实能进入button_click的回调函数,但是按钮却没变化,没有按下和弹起的效果,和鼠标单击还不是完全一模一样,怎样才能实现用键盘实现鼠标click的效果呢?
|
额,这个应该是必须模拟鼠标输入了,给你一篇参考的文章
http://blog.csdn.net/chenzhixin/archive/2008/03/12/2173530.aspx
http://blog.csdn.net/chenzhixin/archive/2008/03/12/2173530.aspx
|
从GTK角度给出一个方法吧,当你接收keypress事件时,判断是否是你要的键,然后给你的要代替的widget发出一个click_event信息,g_signal_emit, 把信息的坐标设置到你button的位置, 这样就可以解决了。
|
还有可能你用得上这个,
static void
key_panel_simulate_key(GtkWidget *window,
gint keyval, gint press)
{
GdkEvent *event;
GdkEventType type;
if(press)
type = GDK_KEY_PRESS;
else
type = GDK_KEY_RELEASE;
event = gdk_event_new(type);
//set the attrbute
event->key.window = window->window;
event->key.keyval = keyval;
event->key.state = 16;
event->key.hardware_keycode = 36;
event->key.is_modifier = 0;
g_object_ref(event->key.window);
if(keyval == GDK_BackSpace)
{
event->key.hardware_keycode = 14;
}
if(keyval == GDK_Left)
{
event->key.hardware_keycode = 105;
}
if(keyval == GDK_Right)
{
event->key.hardware_keycode = 106;
}
gtk_main_do_event(event);
return;
}
static void
key_panel_simulate_key(GtkWidget *window,
gint keyval, gint press)
{
GdkEvent *event;
GdkEventType type;
if(press)
type = GDK_KEY_PRESS;
else
type = GDK_KEY_RELEASE;
event = gdk_event_new(type);
//set the attrbute
event->key.window = window->window;
event->key.keyval = keyval;
event->key.state = 16;
event->key.hardware_keycode = 36;
event->key.is_modifier = 0;
g_object_ref(event->key.window);
if(keyval == GDK_BackSpace)
{
event->key.hardware_keycode = 14;
}
if(keyval == GDK_Left)
{
event->key.hardware_keycode = 105;
}
if(keyval == GDK_Right)
{
event->key.hardware_keycode = 106;
}
gtk_main_do_event(event);
return;
}