<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # FreeBASIC GTK 教程 > 原文: [http://zetcode.com/gui/fbgtk/](http://zetcode.com/gui/fbgtk/) 這是 FreeBASIC GTK 教程。 在本教程中,我們將使用 FreeBASIC 語言在 GTK 庫中創建圖形用戶界面。 本教程適合初學者。 一旦了解了基礎知識并且知道如何一起使用 GTK 和 FreeBASIC,您就可以繼續從 [GTK+ 教程](/tutorials/gtktutorial/)中學習 GTK 庫。 FreeBASIC 與與 GTK 一起使用的其他語言不同。 沒有像 PyGTK 或 GTK# 這樣的綁定。 在 FreeBASIC 中,我們直接在程序中調用 C 代碼。 這樣,FreeBASIC 與 C 語言緊密相連。 ## FreeBASIC FreeBASIC 是一種流行的 BASIC(初學者的通用符號指令代碼)編譯器。 它于 2004 年出現,受到 QuickBASIC 和 C 語言的影響。 FreeBASIC 是一個免費的開源 32 位 BASIC 編譯器。 為了完全支持許多 C 庫,添加了許多功能,如指針,預處理器,宏,而其他 BASIC 編譯器中找不到這些功能。 ## GTK GTK 是用于創建圖形用戶界面的庫。 該庫是用 C 編程語言創建的。 GTK 庫也稱為 GIMP 工具包。 最初,該庫是在開發 GIMP 圖像處理器時創建的。 從那時起,GTK 成為 Linux 和 BSD Unix 下最受歡迎的工具包之一。 如今,開源世界中的大多數 GUI 軟件都是在 Qt 或 GTK 中創建的。 存在用于 C++ ,Python,Perl,Java,C# 和其他編程語言的語言綁定。 ## 第一個例子 在我們的第一個代碼示例中,我們將在屏幕上居中放置一個小窗口。 ```basic ' ZetCode FreeBASIC GTK tutorial ' ' This program centers a window on ' the screen ' ' author Jan Bodnar ' last modified July 2010 ' website www.zetcode.com #include once "gtk/gtk.bi" #define NULL 0 Dim As GtkWidget Ptr win gtk_init(NULL, NULL) win = gtk_window_new(GTK_WINDOW_TOPLEVEL) gtk_window_set_title(GTK_WINDOW(win), "Center") gtk_widget_set_size_request(win, 250, 150) gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER) g_signal_connect(G_OBJECT(win), "destroy", _ G_CALLBACK (@gtk_main_quit), NULL) gtk_widget_show(win) gtk_main() END 0 ``` 此代碼在屏幕上使窗口居中。 它是 FreeBASIC 和 C 代碼的混合體。 ```basic #include once "gtk/gtk.bi" ``` 這是從 FreeBASIC 運行 GTK 代碼所需的頭文件。 ```basic #define NULL 0 ``` FreeBASIC 中沒有內置的`NULL`值。 為了更類似于 GTK C 代碼,我們定義了一個`NULL`值。 ```basic Dim As GtkWidget Ptr win ``` 我們聲明一個指向`GtkWidget`的指針。 ```basic gtk_init(NULL, NULL) ``` 我們啟動 GTK 庫。 ```basic win = gtk_window_new(GTK_WINDOW_TOPLEVEL) ``` 我們創建一個`GtkWidget`窗口。 窗口類型為`GTK_WINDOW_TOPLEVEL`。 頂層窗口具有標題欄和邊框。 它們由窗口管理器管理。 ```basic gtk_window_set_title(GTK_WINDOW(win), "Center") gtk_widget_set_size_request(win, 250, 150) gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER) ``` 這三行為窗口設置標題,調整窗口大小并將其放置在屏幕中央。 ```basic g_signal_connect(G_OBJECT(win), "destroy", _ G_CALLBACK (@gtk_main_quit), NULL) ``` 如果單擊 x 標記,或按 `Alt + F4` 終止應用,則會發出破壞信號。 默認情況下,該窗口不對銷毀信號做出反應。 我們必須通過將`destroy`信號連接到`gtk_main_quit()`函數來顯式終止應用。 有兩個重要角色。 下劃線和`@`字符。 下劃線是 FreeBASIC 中的換行符。 如果代碼行超過一行,則必須使用它。 `@`字符為我們提供了`gtk_main_quit()`函數的地址。 在 C 語言中,函數名稱是函數的地址。 在 FreeBASIC 中并非如此,這就是我們使用@字符的原因。 ```basic gtk_widget_show(win) ``` 該窗口已在內存中創建。 現在我們使用`gtk_widget_show`函數在屏幕上顯示窗口。 ```basic gtk_main() ``` 我們進入應用的主循環。 從這一點開始,應用就坐下來等待事件發生。 ```basic END 0 ``` 我們完成了 FreeBASIC 代碼。 ```basic $ fbc simple.bas $ ./simple ``` 我們編譯并運行該示例。 ![Simple example](https://img.kancloud.cn/59/71/597148b6e4fbcd5ab85d4b46113d8299_258x178.jpg) 圖:簡單 example ## 關閉按鈕 在第二個示例中,我們在窗口上放置一個按鈕小部件。 首先,我們在窗口上放置一個固定的容器,然后在該容器上放置按鈕。 單擊該按鈕將終止該應用。 ```basic ' ZetCode FreeBASIC GTK tutorial ' ' In this example, we place a close ' button on the window. Clicking on the ' button will terminate the application. ' ' author Jan Bodnar ' last modified July 2010 ' website www.zetcode.com #include once "gtk/gtk.bi" #define NULL 0 Dim As GtkWidget Ptr win Dim As GtkWidget Ptr fixed Dim As GtkWidget Ptr button gtk_init(NULL, NULL) win = gtk_window_new(GTK_WINDOW_TOPLEVEL) gtk_window_set_title(GTK_WINDOW(win), "Close") gtk_widget_set_size_request(win, 250, 150) gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER) g_signal_connect(G_OBJECT(win), "destroy", _ G_CALLBACK (@gtk_main_quit), NULL) fixed = gtk_fixed_new() gtk_container_add(GTK_CONTAINER(win), fixed) button = gtk_button_new_with_label("Close") gtk_widget_set_size_request(button, 80, 35) gtk_fixed_put(GTK_FIXED(fixed), button, 50, 50) g_signal_connect(G_OBJECT(button), "clicked", _ G_CALLBACK (@gtk_main_quit), NULL) gtk_widget_show_all(win) gtk_main() END 0 ``` 這是關閉按鈕示例的源代碼。 ```basic Dim As GtkWidget Ptr win Dim As GtkWidget Ptr fixed Dim As GtkWidget Ptr button ``` 我們聲明三個變量。 一個用于頂層窗口,它是 GUI 應用的基本框架。 一個用于容器。 容器是一種特殊的小部件。 它是不可見的。 其唯一目的是包含其他小部件。 在我們的例子中,是按鈕小部件。 ```basic fixed = gtk_fixed_new() gtk_container_add(GTK_CONTAINER(win), fixed) ``` 這兩行創建一個容器小部件,并將其放置在窗口小部件內。 ```basic button = gtk_button_new_with_label("Close") gtk_widget_set_size_request(button, 80, 35) ``` 我們創建一個按鈕小部件,并將其設置為`80x35`像素。 ```basic gtk_fixed_put(GTK_FIXED(fixed), button, 50, 50) ``` 我們在`x = 50`,`y = 50`坐標處將一個按鈕放入容器。 這稱為絕對定位。 它適合于小示例,但在更復雜的程序中,我們使用布局管理器。 ```basic g_signal_connect(G_OBJECT(button), "clicked", _ G_CALLBACK (@gtk_main_quit), NULL) ``` 當我們點擊按鈕時,發出點擊的信號。 `g_signal_connect()`函數將回調(在我們的情況下為內置`gtk_main_quit()`函數)連接到按鈕小部件發出的`clicked`信號。 ```basic gtk_widget_show_all(win) ``` 我們創建了三個小部件。 我們可以在每個窗口上調用`gtk_widget_show()`,或者在窗口小部件上調用`gtk_widget_show_all()`,該窗口小部件一步顯示所有三個小部件。 ![Close button](https://img.kancloud.cn/6c/99/6c99f7e4fba0f52d8c35c2175c81cdf9_258x178.jpg) 圖:關閉按鈕 ## 顯示圖像 在以下示例中,我們在窗口上顯示圖像。 ```basic ' ZetCode FreeBASIC GTK tutorial ' ' This example shows an image on ' the window ' ' author Jan Bodnar ' last modified July 2010 ' website www.zetcode.com #include once "gtk/gtk.bi" #include once "gtk/gdk.bi" #define NULL 0 Dim As GtkWidget Ptr win Dim As GtkWidget Ptr image gtk_init(NULL, NULL) win = gtk_window_new(GTK_WINDOW_TOPLEVEL) gtk_window_set_title(GTK_WINDOW(win), "Red Rock") gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER) g_signal_connect(G_OBJECT(win), "destroy", _ G_CALLBACK (@gtk_main_quit), NULL) gtk_window_set_resizable(GTK_WINDOW(win), FALSE) gtk_container_set_border_width(GTK_CONTAINER(win), 2) image = gtk_image_new_from_file("redrock.png") gtk_container_add(GTK_CONTAINER(win), image) gtk_widget_show_all(win) gtk_main() END 0 ``` 我們在窗口上顯示圖像。 ```basic Dim As GtkWidget Ptr win Dim As GtkWidget Ptr image ``` 在此示例中,我們只有兩個小部件。 窗口小部件和圖像小部件。 ```basic gtk_window_set_resizable(GTK_WINDOW(win), FALSE) ``` 窗口無法調整大小。 請注意,我們沒有為窗口設置大小。 在這種情況下,窗口將自動適合圖像的大小。 ```basic gtk_container_set_border_width(GTK_CONTAINER(win), 2) ``` 我們在容器周圍留出一些空白空間。 ```basic image = gtk_image_new_from_file("redrock.png") gtk_container_add(GTK_CONTAINER(win), image) ``` 我們從 PNG 文件創建圖像小部件。 我們將圖像放置在窗口上。 窗口本身就是一個簡單的容器。 它可以只包含一個小部件。 ## 簡單菜單示例 在下一個代碼示例中,我們將創建一個簡單的菜單。 ```basic ' ZetCode FreeBASIC GTK tutorial ' ' This example shows a simple menu ' ' author Jan Bodnar ' last modified July 2010 ' website www.zetcode.com #include once "gtk/gtk.bi" #define NULL 0 Dim As GtkWidget Ptr win Dim As GtkWidget Ptr vbox Dim As GtkWidget Ptr menubar Dim As GtkWidget Ptr fmenu Dim As GtkWidget Ptr fmi Dim As GtkWidget Ptr qmi gtk_init(NULL, NULL) win = gtk_window_new(GTK_WINDOW_TOPLEVEL) gtk_window_set_title(GTK_WINDOW(win), "Simple menu") gtk_widget_set_size_request(win, 250, 150) gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER) g_signal_connect(G_OBJECT(win), "destroy", _ G_CALLBACK (@gtk_main_quit), NULL) vbox = gtk_vbox_new(FALSE, 0) gtk_container_add(GTK_CONTAINER(win), vbox) menubar = gtk_menu_bar_new() fmenu = gtk_menu_new() fmi = gtk_menu_item_new_with_label("File") qmi = gtk_menu_item_new_with_label("Quit") gtk_menu_item_set_submenu(GTK_MENU_ITEM(fmi), fmenu) gtk_menu_shell_append(GTK_MENU_SHELL(fmenu), qmi) gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fmi) gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0) g_signal_connect(G_OBJECT(qmi), "activate", _ G_CALLBACK(@gtk_main_quit), NULL) gtk_widget_show_all(win) gtk_main() END 0 ``` 這些代碼行創建一個簡單的菜單。 它只有一個菜單項,選擇該菜單項將終止應用。 創建菜單欄有點令人困惑。 我們必須記住,菜單欄和菜單都來自同一個窗口小部件,即菜單外殼。 菜單項僅是菜單的有效子項。 它們還用于實現子菜單。 ```basic Dim As GtkWidget Ptr win Dim As GtkWidget Ptr vbox Dim As GtkWidget Ptr menubar Dim As GtkWidget Ptr fmenu Dim As GtkWidget Ptr fmi Dim As GtkWidget Ptr qmi ``` 我們有六個小部件的六個變量。 一個小部件是一個垂直框,它將設置布局。 菜單欄是一個水平小部件,我們在其上放置菜單。 菜單包含菜單項,這些菜單項會執行某些操作。 就像保存文檔或終止應用一樣。 ```basic vbox = gtk_vbox_new(FALSE, 0) gtk_container_add(GTK_CONTAINER(win), vbox) gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3) ``` 我們創建一個垂直框,使其成為頂層窗口的容器。 `gtk_vbox_new()`函數的第一個參數稱為同質參數。 如果設置為`TRUE`,則一個框中的所有小部件都具有相等的空間分配。 我們不希望這樣,因為菜單欄僅占用窗口的一小部分。 第二個參數是子項之間的空間。 ```basic menubar = gtk_menu_bar_new() fmenu = gtk_menu_new() ``` 在這段代碼中,我們創建一個菜單欄和一個菜單。 ```basic fmi = gtk_menu_item_new_with_label("File") qmi = gtk_menu_item_new_with_label("Quit") ``` 創建兩個菜單項。 ```basic gtk_menu_item_set_submenu(GTK_MENU_ITEM(fmi), fmenu) ``` 此代碼行實現了文件菜單。 邏輯是菜單欄是菜單外殼。 文件菜單也是菜單外殼。 這就是為什么我們將文件菜單視為子菜單或子外殼。 ```basic gtk_menu_shell_append(GTK_MENU_SHELL(fmenu), qmi) gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fmi) ``` 菜單項通過調用`gtk_menu_shell_append()`函數實現。 菜單項將附加到菜單外殼。 在我們的情況下,退出菜單項被附加到文件菜單,并且文件菜單項也被附加到菜單欄。 ```basic gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0) ``` `gtk_box_pack_start()`函數調用將菜單欄添加到垂直框中。 第一個參數是容器,我們在其中放置子窗口小部件。 第二個參數是子窗口小部件。 第三個參數是`expand`參數。 擴展參數設置為`TRUE`的子代將占用垂直框的額外空間。 這些額外的空間將在它們之間平均分配。 我們不希望菜單欄占用任何額外的空間,因此我們將`expand`參數設置為`FALSE`。 如果將擴展設置為`FALSE`,則第四個參數無效。 最后一個參數是`padding`,它在子小部件之間增加了一些額外的空間。 我們不添加任何額外的空間。 ```basic g_signal_connect(G_OBJECT(qmi), "activate", _ G_CALLBACK(@gtk_main_quit), NULL) ``` 通過選擇退出菜單項,我們終止了該應用。 ![Simple menu](https://img.kancloud.cn/73/f2/73f2bf91d87839195bf8d3b8708c7c5a_258x178.jpg) 圖:簡單菜單 example ## 輸入信號 以下示例將說明我們如何對輸入信號做出反應。 當我們使用鼠標指針進入小部件的區域時,將發出`enter`信號。 ```basic ' ZetCode FreeBASIC GTK tutorial ' ' In this code example, we react to the ' enter signal by changing the background ' color of a button widget ' ' author Jan Bodnar ' last modified July 2010 ' website www.zetcode.com #include once "gtk/gtk.bi" #define NULL 0 Dim As GtkWidget Ptr win Dim As GtkWidget Ptr fixed Dim As GtkWidget Ptr btn Sub enter_button Cdecl (Byval widget As GtkWidget Ptr, _ Byval dat As gpointer) Dim col As GdkColor col.red = 27000 col.green = 30325 col.blue = 34181 gtk_widget_modify_bg(widget, GTK_STATE_PRELIGHT, @col) End Sub gtk_init(NULL, NULL) win = gtk_window_new(GTK_WINDOW_TOPLEVEL) gtk_window_set_title(GTK_WINDOW(win), "enter signal") gtk_widget_set_size_request(win, 230, 150) gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER) g_signal_connect(G_OBJECT(win), "destroy", _ G_CALLBACK (@gtk_main_quit), NULL) fixed = gtk_fixed_new() gtk_container_add(GTK_CONTAINER(win), fixed) btn = gtk_button_new_with_label("Button") gtk_widget_set_size_request(btn, 80, 35) gtk_fixed_put(GTK_FIXED(fixed), btn, 50, 50) g_signal_connect(G_OBJECT(btn), "enter", _ G_CALLBACK(@enter_button), NULL) gtk_widget_show_all(win) gtk_main() END 0 ``` 我們將按鈕小部件放入固定的容器中。 當我們輸入按鈕小部件的區域時,將調用`enter_button()`子例程。 在子例程中,我們更改按鈕的背景色。 ```basic Sub enter_button Cdecl (Byval widget As GtkWidget Ptr, _ Byval dat As gpointer) ... End Sub ``` 這是`enter_button()`子例程,我們在其中對`enter`信號做出反應。 `Cdecl`關鍵字指定子例程的調用約定。 在此調用約定中,所有參數都以列出它們的相反順序(即從右到左)傳遞。 對于我們而言,這并不重要。 ```basic Dim col As GdkColor ``` 我們創建一個本地`GdkColor`變量。 它是用于描述 GTK 應用中的顏色的結構。 ```basic col.red = 27000 col.green = 30325 col.blue = 34181 ``` 在這里,我們設置顏色。 ```basic gtk_widget_modify_bg(widget, GTK_STATE_PRELIGHT, @col) ``` `gtk_widget_modify_bg()`設置處于特定狀態的小部件的背景顏色。 在我們的情況下,狀態為`GTK_STATE_PRELIGHT`,這是鼠標指針懸停在小部件上方時的狀態。 第三個參數是指向顏色結構的指針。 ```basic g_signal_connect(G_OBJECT(btn), "enter", _ G_CALLBACK(@enter_button), NULL) ``` 在這里,我們將`enter_button()`子例程連接到按鈕小部件發出的`enter`信號。 ## 復選按鈕示例 在下面的示例中,我們將一個檢查按鈕放入固定容器中。 我們將通過選中和取消選中復選按鈕來顯示和隱藏窗口的標題。 ```basic ' ZetCode FreeBASIC GTK tutorial ' ' This example a check button widget ' toggles the title of the window ' ' author Jan Bodnar ' last modified July 2010 ' website www.zetcode.com #include once "gtk/gtk.bi" #define NULL 0 Dim As GtkWidget Ptr win Dim As GtkWidget Ptr cbtn Dim As GtkWidget Ptr frame Sub toggle_title Cdecl (Byval widget As GtkWidget Ptr, _ Byval win As gpointer) If gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) Then gtk_window_set_title(win, "Check button") Else gtk_window_set_title(win, "") End If End Sub gtk_init(NULL, NULL) win = gtk_window_new(GTK_WINDOW_TOPLEVEL) gtk_window_set_title(GTK_WINDOW(win), "Check button") gtk_widget_set_size_request(win, 250, 150) gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER) g_signal_connect(G_OBJECT(win), "destroy", _ G_CALLBACK (@gtk_main_quit), NULL) frame = gtk_fixed_new() gtk_container_add(GTK_CONTAINER(win), frame) cbtn = gtk_check_button_new_with_label("Show title") gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbtn), TRUE) gtk_fixed_put(GTK_FIXED(frame), cbtn, 50, 50) g_signal_connect(cbtn, "clicked", _ G_CALLBACK(@toggle_title), cast(gpointer, win)) gtk_widget_show_all(win) gtk_main() END 0 ``` 這是檢查按鈕示例的代碼。 ```basic Sub toggle_title Cdecl (Byval widget As GtkWidget Ptr, _ Byval win As gpointer) ``` 如果單擊復選按鈕,我們將調用`toggle_title()`函數。 在這種情況下,我們需要指向兩個對象的指針。 我們需要一個指向檢查按鈕的指針來確定它是否被檢查。 我們還需要指向窗口的指針來設置或取消設置其標題。 ```basic If gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) Then gtk_window_set_title(win, "Check button") Else gtk_window_set_title(win, "") ``` 我們使用`gtk_toggle_button_get_active()`函數確定檢查按鈕的狀態。 我們使用`gtk_window_set_title()`函數設置窗口的標題。 ```basic g_signal_connect(cbtn, "clicked", _ G_CALLBACK(@toggle_title), cast(gpointer, win)) ``` `g_signal_connect()`的最后一個參數通常是一些我們要傳遞給回調函數的數據。 這次,我們需要將另一個指針傳遞給窗口對象。 在這種情況下,我們需要進行鑄造。 這是因為函數需要`gpointer`,并且窗口是`GtkWidget`類型。 FreeBASIC 有一個`case`關鍵字來進行轉換。 ![Check button](https://img.kancloud.cn/36/b2/36b2d0420d87ced75db53ae43016f1da_258x178.jpg) 圖:復選按鈕 example ## `ComboBox`示例 在 FreeBASIC GTK 教程的最后一個示例中,我們將展示組合框小部件。 ```basic ' ZetCode FreeBASIC GTK tutorial ' ' In this example, we present the combo box ' widget ' ' author Jan Bodnar ' last modified July 2010 ' website www.zetcode.com #include once "gtk/gtk.bi" #define NULL 0 Dim As GtkWidget Ptr win Dim As GtkWidget Ptr combo Dim As GtkWidget Ptr fixed Dim As GtkWidget Ptr label Sub combo_selected Cdecl (Byval widget As GtkWidget Ptr, _ Byval win As gpointer) Dim As gchar Ptr text text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)) gtk_label_set_text(GTK_LABEL(win), text) g_free(text) End Sub gtk_init(NULL, NULL) win = gtk_window_new(GTK_WINDOW_TOPLEVEL) gtk_window_set_title(GTK_WINDOW(win), "Check button") gtk_widget_set_size_request(win, 230, 150) gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER) g_signal_connect(G_OBJECT(win), "destroy", _ G_CALLBACK (@gtk_main_quit), NULL) fixed = gtk_fixed_new() combo = gtk_combo_box_new_text() gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Ubuntu") gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Mandriva") gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Fedora") gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Mint") gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Gentoo") gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Debian") gtk_fixed_put(GTK_FIXED(fixed), combo, 50, 50) gtk_container_add(GTK_CONTAINER(win), fixed) label = gtk_label_new("-") gtk_fixed_put(GTK_FIXED(fixed), label, 50, 110) g_signal_connect(G_OBJECT(combo), "changed", _ G_CALLBACK(@combo_selected), cast(gpointer, label)) gtk_widget_show_all(win) gtk_main() END 0 ``` 我們有兩個小部件:組合框和標簽。 從組合框中選擇的選項將顯示在標簽中。 ```basic Dim As gchar Ptr text text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)) gtk_label_set_text(GTK_LABEL(win), text) g_free(text) ``` 在這些行中,我們從組合框中檢索文本并將其設置為標簽。 我們使用指向`gchar`的指針。 它是`glib`庫的基本類型,它是 GTK 庫的基礎。 我們釋放從組合框中檢索文本時創建的內存。 ```basic combo = gtk_combo_box_new_text() gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Ubuntu") gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Mandriva") ... ``` 將創建組合框窗口小部件并填充數據。 ```basic label = gtk_label_new("-") gtk_fixed_put(GTK_FIXED(fixed), label, 50, 110) ``` 標簽窗口小部件已創建并放入容器中。 ```basic g_signal_connect(G_OBJECT(combo), "changed", _ G_CALLBACK(@combo_selected), cast(gpointer, label)) ``` 我們將`combo_selected()`函數插入到組合框的`changed`信號中。 我們再次進行鑄造。 ![A combo box widget](https://img.kancloud.cn/06/b7/06b7a8351f3d299ff5256574ba63ca0b_238x178.jpg) 圖:組合框小部件 這是 FreeBASIC GTK 教程。 我們有幾個示例,這些示例說明了如何使用 FreeBASIC 語言和 GTK 庫。 這些示例清楚地表明,我們混合使用 FreeBASIC 和 C 語言。 一旦知道如何將它們放在一起,就可以進行 GTK 編程。 有關 GTK 庫的更多信息,請參見。 [Tweet](https://twitter.com/share)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看