比例框架元件(The aspect frame widget)和框架元件(frame widget)差不多,除了它還會使子元件的外觀比例(也就是寬和長的比例)保持一定值,如果需要,還會在元件中增加額外的可用空間。這很有用,例如,想 預覽一個大的圖片。當用戶改變視窗的尺寸時,預覽器的尺寸應該隨之改變,但是外觀比例要與原來圖片的尺寸保持一致。
用下面的函式創建一個新的比例框架:
GtkWidget *gtk_aspect_frame_new( const gchar *label,
gfloat xalign,
gfloat yalign,
gfloat ratio,
gboolean obey_child);
|
xalign和yalign參數的作用和創建對齊元件(Alignment widgets)時的一樣。如果obey_child參數設置為 TRUE,子元件的長寬比例會和它所請求的理想長寬比例相匹配。否則,比例值由ratio參數指定。
用以下函式可以改變已有比例框架元件的選項:
void gtk_aspect_frame_set( GtkAspectFrame *aspect_frame,
gfloat xalign,
gfloat yalign,
gfloat ratio,
gboolean obey_child);
|
在下面的範例中,程式用一個比例框架元件顯示一個繪圖區,縱橫比例總是 2:1,而不管用戶如何改變頂層視窗的尺寸。

#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
GtkWidget *window;
GtkWidget *aspect_frame;
GtkWidget *drawing_area;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Aspect Frame");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
/* 創建一個比例框架,將它添加到頂層視窗中 */
aspect_frame = gtk_aspect_frame_new ("2x1", /* label */
0.5, /* center x */
0.5, /* center y */
2, /* xsize/ysize = 2 */
FALSE /* ignore child's aspect */);
gtk_container_add (GTK_CONTAINER (window), aspect_frame);
gtk_widget_show (aspect_frame);
/* 添加一個子元件到比例框架中 */
drawing_area = gtk_drawing_area_new ();
/* 要求一個200×200的視窗,但是比例框架會給出一個200×100
* 的視窗,因為我們已經指定了2×1的比例值 */
gtk_widget_set_size_request (drawing_area, 200, 200);
gtk_container_add (GTK_CONTAINER (aspect_frame), drawing_area);
gtk_widget_show (drawing_area);
gtk_widget_show (window);
gtk_main ();
return 0;
}
|
1 則留言