fedora17,gcc4.7.2,gtk+-3.0
gcc main.c `pkg-config --libs --cflags gtk+-3.0`編譯
#include <gtk/gtk.h>
static gboolean empty=TRUE;
void
entry_buffer_inserted(GtkEntryBuffer *entryBuffer, /* entry有輸入時調用 */
guint position,gchar *chars,guint n_chars,
gpointer data){
if(empty==TRUE){
gtk_button_set_label(GTK_BUTTON(data),"Ok");
gtk_widget_set_sensitive(GTK_WIDGET(data),TRUE); /* 啟用button */
empty=FALSE;
}
}
void
entry_buffer_deleted(GtkEntryBuffer *entryBuffer, /* entry有刪除時調用 */
guint position,guint n_chars,gpointer data){
if(gtk_entry_buffer_get_bytes(entryBuffer)==0){ /* 如果entry為空 */
gtk_button_set_label(GTK_BUTTON(data),"");
gtk_widget_set_sensitive(GTK_WIDGET(data),FALSE); /* 禁用button */
empty=TRUE;
}
}
void
button_clicked(GtkButton *button,gpointer data){
GtkWidget *dialog;
const gchar *buffer;
dialog=gtk_message_dialog_new(NULL,
GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,
GTK_BUTTONS_OK_CANCEL,"妳輸入了:");
buffer=gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(data));
gtk_window_set_title(GTK_WINDOW(dialog),"提示");
gtk_message_dialog_format_secondary_text(
GTK_MESSAGE_DIALOG(dialog),"%s",buffer);
if(gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_OK)
g_printf("clicked ok!\n");
else
g_printf("clicked cancel!\n");
gtk_widget_destroy(dialog);
}
int
main(int argc,char *argv[]){
GtkWidget *window;
GtkWidget *grid;
GtkWidget *button;
GtkWidget *entry;
GtkEntryBuffer *entryBuffer; /* GtkEntryBuffer 保存了GtkEntry裏的文本內容 */
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_MOUSE);
gtk_window_set_default_size(GTK_WINDOW(window),400,200);
gtk_container_set_border_width(GTK_CONTAINER(window),10);
button=gtk_button_new();
gtk_widget_set_vexpand(button,TRUE);
gtk_widget_set_sensitive(button,FALSE);
entry=gtk_entry_new();
entryBuffer=gtk_entry_get_buffer(GTK_ENTRY(entry));
grid=gtk_grid_new();
gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
gtk_grid_set_row_spacing(GTK_GRID(grid),10);
gtk_grid_attach(GTK_GRID(grid),entry,0,0,1,1);
gtk_grid_attach(GTK_GRID(grid),button,0,1,1,1);
gtk_container_add(GTK_CONTAINER(window),grid);
g_signal_connect(G_OBJECT(entryBuffer),"inserted-text",
G_CALLBACK(entry_buffer_inserted),button);
g_signal_connect(G_OBJECT(entryBuffer),"deleted-text",
G_CALLBACK(entry_buffer_deleted),button);
g_signal_connect(G_OBJECT(button),"clicked",
G_CALLBACK(button_clicked),entryBuffer);
g_signal_connect(G_OBJECT(window),"destroy",
G_CALLBACK(gtk_main_quit),NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}