如何更改GTK +中任意窗口小部件的颜色?

时间:2020-03-06 14:24:38  来源:igfitidea点击:

如果我编写的应用程序希望通过使用颜色传达一些信息,那么如何更改给定小部件的背景和前景色?我想知道如何在林间空地中以及以编程方式(转换为计算出的颜色)进行此操作。

我也想知道如何对复杂的小部件执行此操作,例如,包含HBox的VBox包含标签的标签。

理想情况下,这还将包括一个解决方案解决方案,该解决方案使我可以为小部件着色现有的颜色,并标识主题使用的任何图像的平均颜色,以便我可以以编程方式补偿可能使文本不可读或者冲突的任何颜色选择但只要将按钮变成红色,我会很高兴。

解决方案

示例程序:

#include <gtk/gtk.h>

static void on_destroy(GtkWidget* widget, gpointer data)
{
        gtk_main_quit ();
}

int main (int argc, char* argv[])
{
        GtkWidget* window;
        GtkWidget* button;

        gtk_init(&argc, &argv);
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT (window), "destroy",
                G_CALLBACK (on_destroy), NULL);
        button = gtk_button_new_with_label("Hello world!");
        GdkColor red = {0, 0xffff, 0x0000, 0x0000};
        GdkColor green = {0, 0x0000, 0xffff, 0x0000};
        GdkColor blue = {0, 0x0000, 0x0000, 0xffff};
        gtk_widget_modify_bg(button, GTK_STATE_NORMAL, &red);
        gtk_widget_modify_bg(button, GTK_STATE_PRELIGHT, &green);
        gtk_widget_modify_bg(button, GTK_STATE_ACTIVE, &blue);
        gtk_container_add(GTK_CONTAINER(window), button);
        gtk_widget_show_all(window);
        gtk_main();
        return 0;
}

我知道的最好的文档是这里提供的文档:http://ometer.com/gtk-colors.html