버튼 색상을 지정하는 선언은 정확했지만 여러 함수에서 색상을 사용하려면 main() 함수 외부에서 전역으로 선언했습니다. 그래서, 내가 main() 함수에 선언을 넣고 gtk_widget_modify_base()를 gtk_widget_modify_bg()로 바꾸면 완벽하게 작동합니다. 여기
코드
#include <gtk/gtk.h>
static void destroy (GtkWidget *window, gpointer data);
GtkWidget *window;
GtkWidget *table;
GtkWidget *button;
GtkWidget *button1[20][20];
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *title;
GtkWidget *label;
static char *values[100] =
{ "127.0.0.1", "Idle",
"192.168.73.129", "Idle",
"192.168.73.130", "Idle",
"192.168.73.131", "Idle",
"192.168.73.132", "Idle",
"192.168.73.133", "Idle",
"192.168.73.134", "Idle",
};
int main(int argc, char *argv[])
{ gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //gtk_scrolled_window_new(NULL, NULL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 550, 700);
gtk_window_set_title(GTK_WINDOW(window), "Client Activity Monitor");
gtk_container_set_border_width(GTK_CONTAINER(window), 25);
g_signal_connect (G_OBJECT (window), "destroy",G_CALLBACK (destroy), NULL);
table = gtk_table_new(4, 2, TRUE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 2);
GdkColor colorRed;//color declaration
gdk_color_parse("red", &colorRed);//color assignment
int i = 0;
int j = 0;
int pos = 0;
title = gtk_frame_new("Client Logs");
label = gtk_label_new("server: waiting for connections...\n");
gtk_frame_set_shadow_type(GTK_FRAME(title), GTK_SHADOW_IN);
gtk_table_attach_defaults(GTK_TABLE(table), title, 0, 1, 0, 1);
button3 = gtk_button_new_with_label("Start Server");
gtk_widget_modify_fg(button3, GTK_STATE_NORMAL, &colorRed);//color use
gtk_table_attach_defaults(GTK_TABLE(table), button3, 1, 2, 0, 1);
gtk_container_add (GTK_CONTAINER (title), label);
gtk_widget_show_all(title);
for(i=0; i < 6; i++) {
for(j=0; j < 2; j++) {
button1[i][j] = gtk_button_new_with_label(values[pos]);
gtk_widget_modify_fg(button1[i][j], GTK_STATE_NORMAL, &colorRed);
gtk_table_attach_defaults(GTK_TABLE(table), button1[i][j], j, j+1, i+1, i+1+1);
pos++;
}
}
gtk_container_add(GTK_CONTAINER(window), table);
g_signal_connect_swapped (G_OBJECT (button3), "clicked",G_CALLBACK (destroy),(gpointer) window);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
static void destroy (GtkWidget *window, gpointer data)
{
gtk_main_quit();
}
를 보정