gpt4 book ai didi

c - GTk 每个小部件加速器

转载 作者:行者123 更新时间:2023-11-30 18:09:42 24 4
gpt4 key购买 nike

我构建了一个复合小部件,并希望它有自己的加速器(热键),仅当它处于焦点时才可用。到目前为止,我对如何实现这一目标的唯一想法是,当我的小部件进入和失去焦点时,更改顶层的加速器组。看来应该有更好的办法。

最佳答案

每个小部件类都将指向其处理程序的指针作为小部件类结构的一部分公开。您可以在调用 gtk_init() 之后但进入应用主循环之前在运行时修补这些内容。

例如,您可以像这样修补 GtkFoo 的按键处理程序:

static gboolean (*oldFooKeyPress)(GtkWidget* _widget, GdkEventKey* _event);
...
GtkWidgetClass* fooClass = GTK_WIDGET_CLASS(g_type_class_ref(GTK_TYPE_FOO));
oldFooKeyPress = fooClass->key_press_event;
fooClass->key_press_event = myFooKeyPress;

然后你可以像这样编写myFooKeyPress():

static gboolean myFooKeyPress(GtkWidget* widget, GdkEventKey* event)
{
if (widget is one I am interested in &&
event is a special accelerator for that widget)
{
do something special here
and maybe return
}

return oldFooKeyPress(widget, event);
}

我记得,当您进行上述修补时,调用 GTK_TYPE_FOO 将初始化 Foo 小部件类(如果尚未初始化)。

关于c - GTk 每个小部件加速器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598568/

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