?? x1247.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><HTML><HEAD><TITLE>顏色選擇 Color Selection</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="GTK+ 2.0 教程"HREF="book1.html"><LINKREL="UP"TITLE="雜項構件"HREF="c816.html"><LINKREL="PREVIOUS"TITLE="日歷 Calendar"HREF="x1163.html"><LINKREL="NEXT"TITLE="文件選擇 File Selections"HREF="x1270.html"></HEAD><BODYCLASS="SECT1"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">GTK+ 2.0 教程</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="x1163.html"ACCESSKEY="P"><<< Previous</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">雜項構件</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="x1270.html"ACCESSKEY="N">Next >>></A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="SEC-COLORSELECTION">顏色選擇 Color Selection</H1><P>顏色選擇(color selection)構件是一個用來交互式地選擇顏色的構件。這個組合構件讓用戶通過操縱RGB值(紅綠藍)和HSV值(色度、飽和度、純度)來選擇顏色。這是通過調整滑動條(sliders)的值或者文本輸入構件的值,或者從一個色度/飽和度/純度條上選擇相應的顏色來實現的。你還可以通過它來設置顏色的透明性。</P><P>目前,顏色選擇構件只能引發一種信號: color_changed。它是在構件你的顏色值發生變化時,或者通過 gtk_color_selection_set_color() 函數顯式設置構件的顏色值時引發。</P><P>現在可以看一下顏色選擇構件能夠為我們提供一些什么。這個構件有兩種風格:GtkColorSelection 和 GtkColorSelectionDialog。</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">GtkWidget *gtk_color_selection_new( void );</PRE></TD></TR></TABLE><P>你將很少直接使用這個函數。它創建一個孤立的顏色選擇構件,并需要將其放在某個窗口上。顏色選擇構件是從VBox構件派生的。</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">GtkWidget *gtk_color_selection_dialog_new( const gchar *title );</PRE></TD></TR></TABLE><P>這是最常用的顏色選擇構件的構建函數,它創建一個顏色選擇對話框。它內部有一個框架構件,框架構件中包含了一個顏色選擇構件、一個垂直分隔線構件、一個包含了Ok、Cancel、Help三個按鈕的橫向盒。你可以通過訪問顏色選擇對話框構件結構中的"ok_button", "cancel_button"和"help_button"構件來訪問它們(例如:<TTCLASS="LITERAL">GTK_COLOR_SELECTION_DIALOG (colorseldialog)->ok_button</TT>))。</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">void gtk_color_selection_set_has_opacity_control( GtkColorSelection *colorsel, gboolean has_opacity );</PRE></TD></TR></TABLE><P>顏色選擇構件支持調整顏色的不透明性(一般也稱為alpha通道)。缺省值是禁用這個特性。調用下面的函數,將has_opacity設置為TRUE啟用該特性。同樣,has_opacity 設置為 FALSE 時將禁用此特性。</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">void gtk_color_selection_set_current_color( GtkColorSelection *colorsel, GdkColor *color );void gtk_color_selection_set_current_alpha( GtkColorSelection *colorsel, guint16 alpha );</PRE></TD></TR></TABLE><P>可以調用 gtk_color_selection_set_current_color() 函數顯式地設置顏色選擇構件的當前顏色,其中的color參數是一個指向GdkColor的指針。gtk_color_selection_set_current_alpha()用來設置不透明度(alpha通道)。其中的alpha值應該在0(完全透明)和65636(完全不透明)之間。</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">void gtk_color_selection_get_current_color( GtkColorSelection *colorsel, GdkColor *color );void gtk_color_selection_get_current_alpha( GtkColorSelection *colorsel, guint16 *alpha );</PRE></TD></TR></TABLE><P>當需要查詢當前顏色值時,典型情況是接收到一個 "color_changed" 信號時,使用這些函數。</P><P></P><P>下面是一個簡單的示例,它演示了如何使用顏色選擇對話框構件。這個程序顯示了一個包含繪圖區的窗口。點擊它會打開一個顏色選擇對話框,改變顏色選擇對話框中的顏色,會改變繪圖區的背景色。</P><P><SPANCLASS="INLINEMEDIAOBJECT"><IMGSRC="images/colorsel.png"></SPAN></P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING"> #include <glib.h>#include <gdk/gdk.h>#include <gtk/gtk.h>GtkWidget *colorseldlg = NULL;GtkWidget *drawingarea = NULL;GdkColor color;/* 顏色改變信號的處理函數 */void color_changed_cb( GtkWidget *widget, GtkColorSelection *colorsel ){ GdkColor ncolor; gtk_color_selection_get_current_color (colorsel, &ncolor); gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &ncolor); }/* 繪圖區事件處理函數 */gint area_event( GtkWidget *widget, GdkEvent *event, gpointer client_data ){ gint handled = FALSE; gint response; GtkColorSelection *colorsel; /* 檢查是否接收到一個鼠標按鍵按下事件 */ if (event->type == GDK_BUTTON_PRESS) { handled = TRUE; /* 創建顏色選擇對話框 */ if (colorseldlg == NULL) colorseldlg = gtk_color_selection_dialog_new ("Select background color"); /* 獲取顏色選擇構件 */ colorsel = GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (colorseldlg)->colorsel); gtk_color_selection_set_previous_color (colorsel, &color); gtk_color_selection_set_current_color (colorsel, &color); gtk_color_selection_set_has_palette (colorsel, TRUE); /* 為 "color_changed" 信號設置回調函數,將用戶數據設置為 * 顏色選擇構件 */ g_signal_connect (G_OBJECT (colorsel), "color_changed", G_CALLBACK (color_changed_cb), (gpointer)colorsel); /* 顯示對話框 */ response = gtk_dialog_run (GTK_DIALOG (colorseldlg)); if (response == GTK_RESPONSE_OK) gtk_color_selection_get_current_color (colorsel, &color); else gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &color); gtk_widget_hide (colorseldlg); } return handled;}/* 關閉、退出的事件處理函數 */gint destroy_window( GtkWidget *widget, GdkEvent *event, gpointer client_data ){ gtk_main_quit (); return TRUE;}/* 主函數 */gint main( gint argc, gchar *argv[] ){ GtkWidget *window; /* 初始化,處理并刪去跟 gtk 有關的命令參數 */ gtk_init (&argc, &argv); /* 創建頂級窗口,設置標題,以及窗口是否可縮放 */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Color selection test"); gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, TRUE); /* 為 "delete" 和 "destroy" 事件設置回調函數以便退出 */ g_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (destroy_window), (gpointer)window); /* 創建繪圖區,設置尺寸,捕獲鼠標按鍵事件 */ drawingarea = gtk_drawing_area_new (); color.red = 0; color.blue = 65535; color.green = 0; gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &color); gtk_widget_set_size_request (GTK_WIDGET (drawingarea), 200, 200); gtk_widget_set_events (drawingarea, GDK_BUTTON_PRESS_MASK); g_signal_connect (GTK_OBJECT (drawingarea), "event", GTK_SIGNAL_FUNC (area_event), (gpointer)drawingarea); /* 將繪圖區添加到窗口中,然后顯示它們 */ gtk_container_add (GTK_CONTAINER (window), drawingarea); gtk_widget_show (drawingarea); gtk_widget_show (window); /* 進入gtk主循環(這個函數從不會返回) */ gtk_main (); /* 滿足性情暴躁的編譯器 */ return 0;}</PRE></TD></TR></TABLE></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="x1163.html"ACCESSKEY="P"><<< Previous</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="book1.html"ACCESSKEY="H">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="x1270.html"ACCESSKEY="N">Next >>></A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">日歷 Calendar</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="c816.html"ACCESSKEY="U">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">文件選擇 File Selections</TD></TR></TABLE></DIV></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -