2007年3月6日星期二

Button Event


/**
* 按钮与按钮事件
*/

#include<gtk/gtk.h>

// 关闭窗口
void CloseTheApp ( GtkWidget * window, gpointer data ) {
gtk_main_quit ();
}

// 触发按钮
void ButtonEvent ( GtkButton * button, gpointer data ) {
g_print ( "The button was " );
g_print ( ( gchar * ) data );
g_print ( "\n" );
}

gint main ( gint argc, gchar * argv[] ) {
GtkWidget * window;
GtkWidget * button;

gtk_init ( &argc, &argv );

// 创建一下窗口
window = gtk_window_new ( GTK_WINDOW_TOPLEVEL );
gtk_window_set_title ( GTK_WINDOW ( window ), "Button Events" );
gtk_window_set_default_size ( GTK_WINDOW ( window ), 160, 100 );
gtk_signal_connect ( GTK_OBJECT ( window ),
"destroy",
GTK_SIGNAL_FUNC ( CloseTheApp ),
NULL );

// 创建一个按钮
button = gtk_button_new_with_label ( "Button" );

// 点击按钮
gtk_signal_connect ( GTK_OBJECT ( button ),
"clicked",
GTK_SIGNAL_FUNC ( ButtonEvent ),
"clicked" );
// 鼠标进入按钮区域
gtk_signal_connect ( GTK_OBJECT ( button ),
"enter",
GTK_SIGNAL_FUNC ( ButtonEvent ),
"entered" );
// 鼠标离开按钮区域
gtk_signal_connect ( GTK_OBJECT ( button ),
"leave",
GTK_SIGNAL_FUNC ( ButtonEvent ),
"left" );
// 鼠标在按钮上按下
gtk_signal_connect ( GTK_OBJECT ( button ),
"pressed",
GTK_SIGNAL_FUNC ( ButtonEvent ),
"pressed" );
// 鼠标在按钮上释放
gtk_signal_connect ( GTK_OBJECT ( button ),
"released",
GTK_SIGNAL_FUNC ( ButtonEvent ),
"released" );

gtk_container_add ( GTK_CONTAINER ( window ), button );

gtk_widget_show_all (window); // 显示 window 上所有部件
gtk_main ();
return 0;
}

信号处理函数总有一个 gpointer data 的参数, 它作为最后一个参数传递给 gtk_signal_connect 的指针, 被直接传递给信号处理程序中的这个数据参数.

没有评论: