GTK Gossip: GtkRuler

GtkRuler 可以是一個垂直或水平外觀的尺規元件,您可以設定它的上下界,也可以讓它上面的游標跟隨滑鼠的移動,您可以使用gtk_hruler_new()或 gtk_vruler_new()來建立水平或垂直尺規元件,使用gtk_ruler_set_metric()可以設定度量單位,可以設定的值有 GTK_PIXELS(像素)、GTK_INCHES(英吋)、GTK_CENTIMETERS(公釐)。

您可以設定GtkRuler的範圍:
void gtk_ruler_set_range(GtkRuler *ruler,
                         gdouble lower,
                         gdouble upper,
                         gdouble position,
                         gdouble max_size);

lower與upper用來設定尺規的上下界,position設定目前尺規上小游標的顯示位置,max_size則是用來計算尺規上可以顯示刻度及數字的詳細程度時使用,設定越小的數字,尺規刻度或數字會越細,設定越大的數字,尺規刻度或數字範圍會越大。

若要讓尺規上的游標跟隨滑鼠的位置而移動,首先滑鼠移動範圍的元件必須能接受滑鼠移動事件,例如設定GtkWindow接受滑鼠移動事件:
gtk_widget_set_events(window, GDK_POINTER_MOTION_MASK |
                              GDK_POINTER_MOTION_HINT_MASK);

而滑鼠移動的motion_notify_event信號,必須連接到GtkRuler的motion_notify_event函式,例如:
#define EVENT_METHOD(i, x) GTK_WIDGET_GET_CLASS(i)->x

g_signal_connect_swapped(G_OBJECT(window), "motion_notify_event",
                         G_CALLBACK(EVENT_METHOD(hrule, motion_notify_event)),
                         hrule);

下面的範例示範如何讓GtkRuler跟隨滑鼠在GtkWindow上的移動,GtkRuler的位置則是利用 GtkTable 的放置:
  • gtkruler_demo.c
#include <gtk/gtk.h>

#define EVENT_METHOD(i, x) GTK_WIDGET_GET_CLASS(i)->x

int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *table;
GtkWidget *hrule;
GtkWidget *vrule;

gtk_init (&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW (window), "GtkRuler");
gtk_window_set_default_size(GTK_WINDOW(window), 600, 400);

gtk_widget_set_events(window, GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK);

table = gtk_table_new (2, 2, FALSE);
gtk_container_add(GTK_CONTAINER(window), table);

hrule = gtk_hruler_new();
gtk_ruler_set_metric(GTK_RULER(hrule), GTK_PIXELS);
gtk_ruler_set_range(GTK_RULER(hrule), 7, 13, 0, 20);
g_signal_connect_swapped(G_OBJECT(window), "motion_notify_event",
G_CALLBACK(EVENT_METHOD(hrule, motion_notify_event)),
hrule);
gtk_table_attach(GTK_TABLE(table), hrule, 1, 2, 0, 1,
GTK_EXPAND|GTK_SHRINK|GTK_FILL, GTK_FILL, 0, 0);

vrule = gtk_vruler_new();
gtk_ruler_set_metric(GTK_RULER(vrule), GTK_PIXELS);
gtk_ruler_set_range(GTK_RULER(vrule), 0, 400, 10, 400);
g_signal_connect_swapped(G_OBJECT(window), "motion_notify_event",
G_CALLBACK(EVENT_METHOD(vrule, motion_notify_event)),
vrule);
gtk_table_attach(GTK_TABLE(table), vrule, 0, 1, 1, 2,
GTK_FILL, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0);

g_signal_connect(GTK_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();

return 0;
}

一個執行的結果畫面如下所示:





 
 

正版 iPhone MSN
終於來了
官方版功能超完整,使用超安全,免費申裝!
更多訊息..
羅技找出你筆電的好麻吉!
搭配出最COOL的筆電體驗,並與你的好友們分享,就有機會獲得豐富大獎喔!
更多訊息..



当前,全球经济格局深刻调整,数字化浪潮席卷各行各业,智能物流作为现代物流发展的必然趋势和关键支撑,正迎来前所未有的发展机遇。以人工智能、物联网、大数据、云计算、区块链等前沿信息技术的快速迭代与深度融合为驱动,智能物流不再是传统物流的简单技术叠加,而是正在经历一场从自动化向智能化、从被动响应向主动预测、从信息孤岛向全面互联的深刻变革。展望2025年,智能物流系统将不再局限于提升效率、降低成本的基本目标,而是要构建一个感知更全面、决策更精准、执行更高效、协同更顺畅的智慧运行体系。这要求我们必须超越传统思维定式,以系统化、前瞻性的视角,全面规划和实施智能物流系统的建设。本实施方案正是基于对行业发展趋势的深刻洞察和对未来需求的精准把握而制定。我们的核心目标在于:通过构建一个集成了先进感知技术、大数据分析引擎、智能决策算法和高效协同平台的综合智能物流系统,实现物流全链路的可视化、透明化和智能化管理。这不仅是技术层面的革新,更是管理模式和服务能力的全面提升。本方案旨在明确系统建设的战略方向、关键任务、技术路径和实施步骤,确保通过系统化部署,有效应对日益复杂的供应链环境,提升整体物流韧性,优化资源配置效率,降低运营成本,并最终为客户创造更卓越的价值体验。我们致力于通过本方案的实施,引领智能物流迈向更高水平,为构建现代化经济体系、推动高质量发展提供强有力的物流保障。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值