- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现 GtkSpinButton 对于 GTK GUI 上的受控输入数字很有用。但是这里有一些 GTK 按钮的好特性,在许多情况下可能不需要。如果我们在 scrolledwindow 中有 GtkSpinButton 那么用户可能会不小心更改值,或者 GtkSpinButton 可以从 scrolledwindow 采取滚动行为。
问题:是否有可能使 GtkScrollButton 对鼠标滚轮不敏感,就像 GtkEntry 一样。或者更好的是,可以在没有向上/向下按钮的情况下显示 GtkSpinButton。如果不是,如何将滚动信号从 GtkSpinButton 重定向到滚动窗口?
我试试这个:
SCROLL_numgreen (GtkObject *object, GdkEvent *event, gpointer user_data)
{
switch (((GdkEventScroll *)event)->direction)
{
case GDK_SCROLL_UP:
return TRUE;
break;
case GDK_SCROLL_DOWN:
return TRUE;
break;
... etc...
但这只会“吃掉”来自 GtkSpinButton 的滚动信号并在适当的位置阻止滚动窗口。我最想要一些不干预每个 GtkSpinButton 事件的通用解决方案。
最佳答案
这里有一些关于您的查询的提示:
是否有可能使 GtkScrollButton 对鼠标滚轮不敏感,就像 GtkEntry 一样?
鼠标滚轮滚动、鼠标点击都是事件。事件可以被屏蔽。这可以在两个层面上完成。
GtkWidget
级别:您可以使用 gtk_widget_get_events()
这将以 GdkEventMask
的形式返回事件掩码.您可以根据需要修改它并使用 gtk_widget_set_events()
进行设置GdkWindow
级别:GtkWidget
有自己的绘图/事件区域有一个 GdkWindow
与之相关。您可以使用 gdk_window_get_events()
获取此窗口的事件掩码并返回更改 GdkEventMask
根据您的需要,使用 gdk_window_set_events()
将其设置为 GdkWindow
.您可以通过按位操作修改事件掩码。如果 GdkWindow
在多个小部件之间共享,则此掩码将影响所有小部件。对于屏蔽滚动事件,您可以查看 GDK_SCROLL_MASK
、GDK_BUTTON_PRESS_MASK
和 GDK_BUTTON_RELEASE_MASK
。您可以随时检查您要查找的事件的掩码是否已设置。 注意:只有为GtkWidget
创建了GdkWindow
后,GdkWindow
相关调用才会成功。您可以在小部件的 gtk_widget_show()
或包含这些小部件的窗口的 gtk_widget_show_all
之后进行这些调用。或者更好的是,可以在没有向上/向下按钮的情况下显示 GtkSpinButton。
AFAIK GtkSpinButton
被实现为具有向上/向下按钮指示它提供的功能。如果你不想要这个,那么你可以选择另一个小部件,比如 GtkEntry
(GtkSpinButton
是“derived”)或 GtkLabel
。当然,您可以根据需要创建自己的小部件(从头开始或从现有 GtkWidget
“派生”)并使用它;没有人能阻止你这样做:)
如何将滚动信号从 GtkSpinButton 重定向到 scrolledwindow?
可以在 GtkSpinButton 的 "scroll-event"
回调中执行此操作。您可以停止在 GtkSpinButton
上发射信号并返回 FALSE
以传播事件。
...
/* Event callback */
gboolean spinbutton_scroll_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
/* Stop emission on current widget. Default handler also not called */
/* Refer http://developer.gnome.org/gobject/stable/gobject-Signals.html#g-signal-stop-emission-by-name */
g_signal_stop_emission_by_name(widget, "scroll-event");
/* Return FALSE to propagate the event further; thus scroll window will scroll
If TRUE returned other handlers not invoked for this event,
thus no scroll on scroll window */
return FALSE;
}
...
/* Connect scroll-event to the callback */
g_signal_connect(spinbutton, "scroll-event",
G_CALLBACK(spinbutton_scroll_handler),
(gpointer)0);
...
希望这对您有所帮助!
关于gtk - 从 GtkSpinButton 移除滚动能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611813/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!