亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1271 | 回復(fù): 0
打印 上一主題 下一主題

工具欄 Toolbar[GTK+ 2.0] [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-10-06 08:17 |只看該作者 |倒序瀏覽

工具欄 Toolbar
工具欄(Toolbars)常用來將一些構(gòu)件分組,這樣能夠簡化定制它們的外觀和布局。典型情況下工具欄由帶圖標(biāo)和標(biāo)簽以及工具提示的按鈕組成,不過,其它構(gòu)件也可以放在工具欄里面。最后,各工具欄組件可以水平或垂直排列,還可以顯示圖標(biāo)或標(biāo)簽,或者兩者都顯示。
用下面的函數(shù)創(chuàng)建一個工具欄(可能有些人已經(jīng)猜到了):
GtkWidget *gtk_toolbar_new( void );
創(chuàng)建工具欄以后,可以向其中追加、前插和插入工具欄項(這里意指簡單文本字符串)或元素(這里意指任何構(gòu)件類型)。要想描述一個工具欄上的對象,需要一個標(biāo)簽文本、一個工具提示文本、一個私有工具提示文本、一個圖標(biāo)和一個回調(diào)函數(shù)。例如,要前插或追加一個按鈕,應(yīng)該使用下面的函數(shù):
GtkWidget *gtk_toolbar_append_item( GtkToolbar    *toolbar,
                                    const char    *text,
                                    const char    *tooltip_text,
                                    const char    *tooltip_private_text,
                                    GtkWidget     *icon,
                                    GtkSignalFunc  callback,
                                    gpointer       user_data );
GtkWidget *gtk_toolbar_prepend_item( GtkToolbar    *toolbar,
                                     const char    *text,
                                     const char    *tooltip_text,
                                     const char    *tooltip_private_text,
                                     GtkWidget     *icon,
                                     GtkSignalFunc  callback,
                                     gpointer       user_data );
如果要使用 gtk_toolbar_insert_item(),除上面函數(shù)中要指定的參數(shù)以外,還要指定插入對象的位置,形式如下:
GtkWidget *gtk_toolbar_insert_item( GtkToolbar    *toolbar,
                                    const char    *text,
                                    const char    *tooltip_text,
                                    const char    *tooltip_private_text,
                                    GtkWidget     *icon,
                                    GtkSignalFunc  callback,
                                    gpointer       user_data,
                                    gint           position );
要簡單地在工具欄項之間添加空白區(qū)域,可以使用下面的函數(shù):
void gtk_toolbar_append_space( GtkToolbar *toolbar );
void gtk_toolbar_prepend_space( GtkToolbar *toolbar );
void gtk_toolbar_insert_space( GtkToolbar *toolbar,
                               gint        position );
如果需要,工具欄的放置方向和它的式樣可以在運行時用下面的函數(shù)設(shè)置:
void gtk_toolbar_set_orientation( GtkToolbar     *toolbar,
                                  GtkOrientation  orientation );
void gtk_toolbar_set_style( GtkToolbar      *toolbar,
                            GtkToolbarStyle  style );
void gtk_toolbar_set_tooltips( GtkToolbar *toolbar,
                               gint        enable );
上面的orientation參數(shù)取GTK_ORIENTATION_HORIZONTAL或GTK_ORIENTATION_VERTICAL。style參數(shù)用于設(shè)置工具欄項的外觀,可以取GTK_TOOLBAR_ICONS,GTK_TOOLBAR_TEXT或GTK_TOOLBAR_BOTH。
要想了解工具欄還能做什么,看一看下面的程序(在代碼之間我們插入了一些解釋):
#include
/* 這個函數(shù)連接到Close按鈕或者從窗口管理器關(guān)閉窗口的事件上 */
gint delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
{
  gtk_main_quit ();
  return FALSE;
}
上面的代碼和其它的 GTK 應(yīng)用程序差別不大,有一點不同的是:我們包含了一個漂亮的 XPM 圖片,用作所有按鈕的圖標(biāo)。
GtkWidget* close_button; /* 這個按鈕將引發(fā)一個信號以
                          * 關(guān)閉應(yīng)用程序 */
GtkWidget* tooltips_button; /* 啟用/禁用工具提示 */
GtkWidget* text_button,
         * icon_button,
         * both_button; /* 切換工具欄風(fēng)格的單選按鈕 */
GtkWidget* entry; /* 一個文本輸入構(gòu)件,用于演示任何構(gòu)件都可以組裝到
                   * 工具欄里 */
事實上,不是上面所有的構(gòu)件都是必須的,我把它們放在一起,是為了讓事情更清晰。
/* 很簡單...當(dāng)按鈕進(jìn)行狀態(tài)切換時,我們檢查哪一個按鈕是活動的,依此設(shè)置工具欄的式樣
* 注意,工具欄是作為用戶數(shù)據(jù)傳遞到回調(diào)函數(shù)的! */
void radio_event (GtkWidget *widget, gpointer data)
{
  if (GTK_TOGGLE_BUTTON (text_button)->active)
    gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
  else if (GTK_TOGGLE_BUTTON (icon_button)->active)
    gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
  else if (GTK_TOGGLE_BUTTON (both_button)->active)
    gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
}
/* 更簡單,檢查給定開關(guān)按鈕的狀態(tài),依此啟用或禁用工具提示 */
void toggle_event (GtkWidget *widget, gpointer data)
{
  gtk_toolbar_set_tooltips (GTK_TOOLBAR (data),
                            GTK_TOGGLE_BUTTON (widget)->active );
}
上面只是當(dāng)工具欄上的一個按鈕被按下時要調(diào)用的兩個回調(diào)函數(shù)。你應(yīng)該已經(jīng)熟悉了這些東西,如果你已經(jīng)使用過開關(guān)按鈕(以及單選按鈕)。
int main (int argc, char *argv[])
{
  /* 下面是主窗口(一個對話框)和一個把柄盒(handlebox) */
  GtkWidget* dialog;
  GtkWidget* handlebox;
  /* 好了,我們需要一個工具欄,一個帶掩碼(mask)的圖標(biāo)(所有的按鈕共用一個掩碼)以及
   * 一個放圖標(biāo)的圖標(biāo)構(gòu)件(但我們會為每個按鈕創(chuàng)建一個分割構(gòu)件) */
  GtkWidget * toolbar;
  GtkWidget * iconw;
  /* 這個在所有的 GTK 程序中都被調(diào)用。 */
  gtk_init (&argc, &argv);
  
  /* 用給定的標(biāo)題和尺寸創(chuàng)建一個新窗口 */
  dialog = gtk_dialog_new ();
  gtk_window_set_title (GTK_WINDOW (dialog), "GTKToolbar Tutorial");
  gtk_widget_set_size_request (GTK_WIDGET (dialog), 600, 300);
  GTK_WINDOW (dialog)->allow_shrink = TRUE;
  /* 在關(guān)閉窗口時退出 */
  g_signal_connect (G_OBJECT (dialog), "delete_event",
                    G_CALLBACK (delete_event), NULL);
  /* 需要實例化窗口,因為我們要在它的內(nèi)容中為工具欄設(shè)置圖片 */
  gtk_widget_realize (dialog);
  /* 我們將工具欄放在一個手柄構(gòu)件(handle box)上,
   * 這樣它可以從主窗口上移開 */
  handlebox = gtk_handle_box_new ();
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
                      handlebox, FALSE, FALSE, 5);
上面的代碼和任何其它Gtk應(yīng)用程序都差不多。它們進(jìn)行 GTK 初始化,創(chuàng)建主窗口等。唯一需要解釋的是:一個手柄盒(a handle box)。手柄盒只是一個可以在其中組裝構(gòu)件的盒子。它和普通盒子的區(qū)別在于它能從一個父窗口移開(事實上,手柄盒保留在父窗口上,但是它縮小為一個非常小的矩形,同時它的所有內(nèi)容重新放在一個新的可自由移動的浮動窗口上)。擁有一個可浮動工具欄給人感覺非常好,所以這兩種構(gòu)件經(jīng)常同時使用。
  /* 工具欄設(shè)置為水平的,同時帶有圖標(biāo)和文本
   * 在每個項之間有5像素的間距,
   * 并且,我們也將它放在手柄盒上 */
  toolbar = gtk_toolbar_new ();
  gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar), GTK_ORIENTATION_HORIZONTAL);
  gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH);
  gtk_container_set_border_width (GTK_CONTAINER (toolbar), 5);
  gtk_toolbar_set_space_size (GTK_TOOLBAR (toolbar), 5);
  gtk_container_add (GTK_CONTAINER (handlebox), toolbar);
上面的代碼初始化工具欄構(gòu)件。
  /* 工具欄上第一項是按鈕 */
  iconw = gtk_image_new_from_file ("gtk.xpm"); /* 圖標(biāo)構(gòu)件 */
  close_button =
    gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), /* 工具欄 */
                             "Close",               /* 按鈕標(biāo)簽 */
                             "Closes this app",     /* 按鈕的工具提示 */
                             "Private",             /* 工具提示的私有信息 */
                             iconw,                 /* 圖標(biāo)構(gòu)件 */
                             GTK_SIGNAL_FUNC (delete_event), /* 一個信號 */
                             NULL);
  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); /* 工具欄項后的空白 */
在上面的代碼中,可以看到最簡單的情況:在工具欄上增加一個按鈕。在追加一個新的工具欄項前,必須構(gòu)造一個圖片(image)構(gòu)件用作該項的圖標(biāo),這個步驟我們要對每一個工具欄項重復(fù)一次。在工具欄項之間還要增加間隔空間,這樣后面的工具欄項就不會一個接一個緊挨著。可以看到,gtk_toolbar_append_item()返回一個指向新創(chuàng)建的按鈕構(gòu)件的指針,所以我們可以用正常的方式使用它。
  /* 現(xiàn)在,我們創(chuàng)建單選按鈕組... */
  iconw = gtk_image_new_from_file ("gtk.xpm");
  icon_button = gtk_toolbar_append_element (
                    GTK_TOOLBAR (toolbar),
                    GTK_TOOLBAR_CHILD_RADIOBUTTON, /* 元素類型 */
                    NULL,                          /* 指向構(gòu)件的指針 */
                    "Icon",                        /* 標(biāo)簽 */
                    "Only icons in toolbar",       /* 工具提示 */
                    "Private",                     /* 工具提示的私有字符串 */
                    iconw,                         /* 圖標(biāo) */
                    GTK_SIGNAL_FUNC (radio_event), /* 信號 */
                    toolbar);                      /* 信號傳遞的數(shù)據(jù) */
  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
這里我們開始創(chuàng)建一個單選按鈕組。用 gtk_toolbar_append_element 就行了。事實上,使用這個函數(shù),我們能夠添加簡單的工具欄項或空白間隔(類型為GTK_TOOLBAR_CHILD_SPACE或GTK_TOOLBAR_CHILD_BUTTON)。在上面的示例中,我們先創(chuàng)建了一個單選按鈕組。要為這個組創(chuàng)建其它單選按鈕,需要一個指向前一個按鈕的指針,這樣按鈕的清單可以很容易組織起來(看在本文檔前面部分的
單選按鈕
節(jié))。
  /* 后面的單選按鈕引用前面創(chuàng)建的 */
  iconw = gtk_image_new_from_file ("gtk.xpm");
  text_button =
    gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
                                GTK_TOOLBAR_CHILD_RADIOBUTTON,
                                icon_button,
                                "Text",
                                "Only texts in toolbar",
                                "Private",
                                iconw,
                                GTK_SIGNAL_FUNC (radio_event),
                                toolbar);
  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
                                          
  iconw = gtk_image_new_from_file ("gtk.xpm");
  both_button =
    gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
                                GTK_TOOLBAR_CHILD_RADIOBUTTON,
                                text_button,
                                "Both",
                                "Icons and text in toolbar",
                                "Private",
                                iconw,
                                GTK_SIGNAL_FUNC (radio_event),
                                toolbar);
  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (both_button), TRUE);
最后,我們必須手工設(shè)置其中一個按鈕的狀態(tài)(否則它們?nèi)刻幱诨顒訝顟B(tài),并阻止我們在它們之間做出選擇)。
  /* 下面只是一個簡單的開關(guān)按鈕 */
  iconw = gtk_image_new_from_file ("gtk.xpm");
  tooltips_button =
    gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
                                GTK_TOOLBAR_CHILD_TOGGLEBUTTON,
                                NULL,
                                "Tooltips",
                                "Toolbar with or without tips",
                                "Private",
                                iconw,
                                GTK_SIGNAL_FUNC (toggle_event),
                                toolbar);
  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tooltips_button), TRUE);
開關(guān)按鈕的創(chuàng)建方法就很明顯了(如果你已經(jīng)知道怎么創(chuàng)建單選按鈕了)。
  /* 要將一個構(gòu)件組裝到工具欄上,只需創(chuàng)建它,然后將它追
   * 加到工具欄上,同時設(shè)置合適的工具提示 */
  entry = gtk_entry_new ();
  gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar),
                             entry,
                             "This is just an entry",
                             "Private");
  /* 因為它不是工具欄自己創(chuàng)建的,所以我們還需要顯示它 */
  gtk_widget_show (entry);
可以看到,將任何構(gòu)件添加到工具欄上都是非常簡單的。唯一要記住的是,這個構(gòu)件必須手工顯示(與此相反,工具欄自己創(chuàng)建的工具欄項隨工具欄一起顯示)。
  /* 好了,現(xiàn)在可以顯示所有的東西了 */
  gtk_widget_show (toolbar);
  gtk_widget_show (handlebox);
  gtk_widget_show (dialog);
  /* 進(jìn)入主循環(huán),等待用戶的操作 */
  gtk_main ();
  
  return 0;
}
這樣,我們就到了工具欄教程的末尾。當(dāng)然,還需要一個漂亮的XPM圖標(biāo)。下面就是:
/* XPM */
static char * gtk_xpm[] = {
"32 39 5 1",
".      c none",
"+      c black",
"@      c #3070E0",
"#      c #F05050",
"$      c #35E035",
"................+...............",
"..............+++++.............",
"............+++++@@++...........",
"..........+++++@@@@@@++.........",
"........++++@@@@@@@@@@++........",
"......++++@@++++++++@@@++.......",
".....+++@@@+++++++++++@@@++.....",
"...+++@@@@+++@@@@@@++++@@@@+....",
"..+++@@@@+++@@@@@@@@+++@@@@@++..",
".++@@@@@@+++@@@@@@@@@@@@@@@@@@++",
".+#+@@@@@@++@@@@+++@@@@@@@@@@@@+",
".+##++@@@@+++@@@+++++@@@@@@@@$@.",
".+###++@@@@+++@@@+++@@@@@++$$$@.",
".+####+++@@@+++++++@@@@@+@$$$$@.",
".+#####+++@@@@+++@@@@++@$$$$$$+.",
".+######++++@@@@@@@++@$$$$$$$$+.",
".+#######+##+@@@@+++$$$$$$@@$$+.",
".+###+++##+##+@@++@$$$$$$++$$$+.",
".+###++++##+##+@@$$$$$$$@+@$$@+.",
".+###++++++#+++@$$@+@$$@++$$$@+.",
".+####+++++++#++$$@+@$$++$$$$+..",
".++####++++++#++$$@+@$++@$$$$+..",
".+#####+++++##++$$++@+++$$$$$+..",
".++####+++##+#++$$+++++@$$$$$+..",
".++####+++####++$$++++++@$$$@+..",
".+#####++#####++$$+++@++++@$@+..",
".+#####++#####++$$++@$$@+++$@@..",
".++####++#####++$$++$$$$$+@$@++.",
".++####++#####++$$++$$$$$$$$+++.",
".+++####+#####++$$++$$$$$$$@+++.",
"..+++#########+@$$+@$$$$$$+++...",
"...+++########+@$$$$$$$$@+++....",
".....+++######+@$$$$$$$+++......",
"......+++#####+@$$$$$@++........",
".......+++####+@$$$$+++.........",
".........++###+$$$@++...........",
"..........++##+$@+++............",
"...........+++++++..............",
".............++++..............."};

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/75558/showart_1273253.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP