分页: 1 / 1

关于“GTK+2.0走马灯”程序的疑惑

发表于 : 2008-08-12 20:56
chenlb206
小弟曾天真的以为“走马灯程序可以这样写:

#include <gtk/gtk.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>

gint x = 1000;
gint y = 800;

GtkWidget *label;
GtkWidget *fixed;


void *move_button( void *arg)
{
while(1)
{
if (x <= 0)
x=1000;
x=x -10 ;
gtk_fixed_move (GTK_FIXED (fixed), label, x, y);
usleep(50000);
}
}

int main( int argc, char *argv[] )
{

GtkWidget *window;
int res;
pthread_t a_thread;
gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Fixed Container");
gtk_window_set_default_size(GTK_WINDOW (window), 1000, 800);

g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK (gtk_main_quit), NULL);

gtk_container_set_border_width (GTK_CONTAINER (window), 10);
fixed = gtk_fixed_new ();
gtk_container_add (GTK_CONTAINER (window), fixed);
gtk_widget_show (fixed);

label = gtk_label_new("I like DMB");

gtk_fixed_put (GTK_FIXED (fixed), label, 1000, 800);

gtk_widget_show (label);
gtk_widget_show (window);


res = pthread_create(&a_thread,NULL,move_button,NULL);
if (res != 0)
{
perror("Thread creation failed");
exit(EXIT_FAILURE);
}

gtk_main ();

return 0;
}


可结果是label 不会随时间均匀的在gtk的窗口上显示走动!当鼠标点击gtk窗口时label才动一下! 这是为什么呢? 如何解决?

发表于 : 2008-08-12 20:57
chenlb206
顶一个

发表于 : 2008-08-12 21:03
BigSnake.NET
移动了label后要重画吧

发表于 : 2008-08-13 8:45
chenlb206
BigSnake.NET 写了:移动了label后要重画吧

如何重画阿? 我刚刚接触gtk+

发表于 : 2008-08-13 10:34
eexpress
系统有定时器的。类似这样的。
Glib::signal_timeout().connect(sigc::mem_fun(*this, &MainWnd::on_timeout), timeout*1000);


usleep(50000);

看devhelp吧。或者找例子。

学习GTK有什么网站好一些啊?

发表于 : 2008-08-13 10:46
chenlb206
如题!