2013-06-13 3 views
0
  1. Я создал прокрученное окном gtk.
  2. я прикрепил вид GTK дерева к нему
  3. Я создал регулировки GTK для вертикальной прокрутки цели
  4. Я создал Gtk вертикальную полосу прокрутки и с корректировкой созданной выше.
  5. Я заполнил древовидную структуру некоторыми данными.
  6. Я попытался поймать сигнал, когда полоса прокрутки перемещается вверх или DOWM с помощью:

gtk_signal_connect(GTK_OBJECT(vscrollbar), "value_changed",G_CALLBACK(my_function),NULL);Определить шаг вверх/вниз по полосе прокрутки в gtk

Мой обработчик сигнала выглядит следующим образом:

void my_function(GtkWidget *widget) 
{ 
printf("Hi\n"); 
} 

Как показано выше печатает a Hi всякий раз, когда полоса прокрутки перемещается на один шаг вверх или на один шаг вниз. Но я хочу напечатать up, когда его переместили вверх или down, когда его спустили вниз.

void my_function(GtkWidget *widget) 
{ 
if(/* movement is up, How to identify? */) 
printf("UP\n"); 
if(/* movement is down, How to identify */) 
printf("DOWN\n"); 
} 

Я полностью новый человек, когда дело касается программирования gtk. Может кто-нибудь предложить, что мне нужно сделать для этого?

+1

Кстати, вам не нужно создавать GtkAdjustment или полосу прокрутки. 1. Создайте GtkScrolledWindow (null, null) 2. Создайте GtkTreeView и добавьте его с gtk_container_add Теперь вам нужно просто подключить сигнал к настройке, созданной автоматически прокручиваемым окном. Кроме того, вы должны использовать * g_signal_connect * вместо этого. Вероятно, вам нужно проверить версии новых версий Gtk + – erick2red

ответ

1

Во-первых, предложение: проверьте последнюю ссылку на API, даже если вам нужно использовать старые библиотеки. Это поможет вам не писать код, который уже устарел (gtk_signal_connect и GTK_OBJECT выглядят довольно ... древними для любого, кто работает с текущим GTK +). И если вы действительно можете использовать текущий GTK +, сделайте это.

Что касается вашей проблемы, вы правы, что API не говорит вам о направлении или величине изменения. Вы можете использовать «статический gdouble last_value» в вашем обработчике сигнала и сравнить его с текущим значением, чтобы узнать направление (и не забудьте установить last_value после этого :)).

Смежные вопросы