網(wǎng)上有很多關(guān)于pos機(jī)添加小程序開發(fā),用GTK+來創(chuàng)建一個帶界面的C語言程序4—給窗口添加多個控件的知識,也有很多人為大家解答關(guān)于pos機(jī)添加小程序開發(fā)的問題,今天pos機(jī)之家(www.tjfsxbj.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)添加小程序開發(fā)
為窗口添加一個按鈕已經(jīng)知道怎么做了,但是一個窗口程序不可能只有一個按鈕控件,當(dāng)繼續(xù)向窗口中添加按鈕時會發(fā)現(xiàn)程序出錯了,這是因為一個窗口只能容納一個控件。而要容納多個控件那又該怎么做呢?我們知道容器分為兩種,能容納多個控件的容器和只能容納一個控件的容器,窗口就屬于只能容納一個控件的容器,那么就可以這么做,先把控件放到能容納多個控件的容器中,然后在把這個容器放到窗口容器中,不就能達(dá)到放多個控件的目的了嗎。那么就一起來了解一下能容納多個控件的容器吧。
GTK+中能容納多個控件的容器有很多,例如有盒狀容器(GtkBox)、格狀容器(GtkTable)、按鈕盒(GtkButtonBox)、分割面板(GtkPanel)、固定布局(GtkFixed)、工具欄(GtkToolbar)等,其中最常用的就是盒狀和格狀布局。那么就先來認(rèn)識一下盒狀容器吧。
盒狀容器顧名思義就是一種按照一定順序和方向緊密排列多個控件的容器。然后在盒狀容器的基礎(chǔ)上又可以分為縱向盒狀容器(GtkVBox)和橫向盒狀容器(GtkHBox),兩者處了創(chuàng)建和排列控件的方式不一樣之外,其使用方式是一樣的,沒有差別。我們就以添加多個按鈕為例。
給窗口添加多個按鈕
/*用盒狀容器排列按鈕*/
#include <gtk/gtk.h>
int main(int argc, char * argv[])
{
GtkWidget * window;
GtkWidget * vbox;
GtkWidget * hbox;
GtkWidget * button;
gchar * title = "盒狀容器";
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
gtk_window_set_title(GTK_WINDOW(window), title);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width="360px",height="auto" />
//創(chuàng)建一個垂直盒子容器
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
//創(chuàng)建一個水平盒子容器
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
button = gtk_button_new_with_label("按鈕一");
//將按鈕控件加入到盒子容器中
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 3);
button = gtk_button_new_with_label("按鈕二");
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 3);
gtk_container_add(GTK_CONTAINER(vbox), hbox);
button = gtk_button_new_with_label("按鈕三");
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 3);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(window);
gtk_main();
return FALSE;
}
編輯Makefile文件,并在終端執(zhí)行make命令開始編譯,執(zhí)行./GtkBox即可運(yùn)行此程序,運(yùn)行結(jié)果:
窗口顯示多個按鈕
代碼分析:
1. 盒狀容器
這段代碼中我們定義了兩個盒狀容器的控件指針vbox, hbox, 在處理好窗口內(nèi)容設(shè)置后開始創(chuàng)建盒狀容器,創(chuàng)建盒狀容器的函數(shù)為gtk_box_new(),其函數(shù)原型為:
int gtk_box_new(int orientation, int spacing)
orentation:盒子的方向,有兩個可選值:GTK_ORIENTATION_HORIZONTAL(水平橫向)、GTK_ORIENTATION_VERTICAL(垂直縱向)
spacing:容器中控件之間的間隙,通常為0,單位像素。
創(chuàng)建完盒子容器后,就可以向其中添加其他控件了。向盒狀容器中添加控件可以使用我們以前用過的gtk_container_add函數(shù),但是這樣只能加一個控件。還有就是本例中的方法:gtk_box_pack_*系列函數(shù)向盒狀容器中添加并排列控件,這樣的函數(shù)一共有4個,分別是:gtk_box_pack_start、gtk_box_pack_end、gtk_box_pack_start_defaults、gtk_box_pack_end_defaults。
gtk_box_pack_start、gtk_box_pack_end分別表示按順序從前到后依次排列和從后到前依次排列。就拿gtk_box_pack_start這個函數(shù)舉例,其函數(shù)原型為:void gtk_box_pack_start(int box, int child,boolean expand, boolean fill, int padding)
box:要容納控件的容器對象
child:被容納控件的指針
expand:是否擴(kuò)展,一般為FALSE
fill:是否添加
padding:與前一個控件的間隔
如果不考慮控件間的間隔、是否擴(kuò)展和是否添充的話還可以使用函數(shù) gtk_box_pack_start_defaults 和 gtk_box_pack_end_defaults。這兩函數(shù)只有兩個參數(shù),即容器對象指針和被容納對象指針,即gtk_box_pack_start_defaults(GTK_BOX(box),button);即可。
注意,由于我們創(chuàng)建的是盒狀容器Box,而這些函數(shù)操作對象是Box,所以一定不要忘了用 GTK_BOX 宏轉(zhuǎn)換一下,否則編譯時會出警告信息,程序也會變得不穩(wěn)定。
2. 創(chuàng)建按鈕
這段代碼中只定義了一個控件指針 button,我們這里卻創(chuàng)建了 4 個按鈕,因為每個按鈕創(chuàng)建之后就不再對它操作了(即不再明確使用這個指針),所以下一個按鈕創(chuàng)建時還會為這個指針賦值,這在 GTK+中是允許的。這樣做有利有弊,利在于只聲明了一個指針變量,代碼行數(shù)減少了;弊則是如果分別對這幾個按鈕操作必需再聲明不同名稱的變量。
3. 顯示所有控件
前面代碼中每一個控件都要用函數(shù) gtk_widget_show 來顯示,如果還用這個函數(shù)來顯示控件的話,那么我們的代碼還得增加 6 行,這使得代碼冗長且不便于維護(hù)。這里采用了gtk_widget_show_all 函數(shù),它的參數(shù)是一個容器控件的指針,它取代了那 6 行代碼(甚至更多行代碼),顯示容器中所有控件。這樣一來使代碼更簡潔明了,一看就懂。
以上就是關(guān)于pos機(jī)添加小程序開發(fā),用GTK+來創(chuàng)建一個帶界面的C語言程序4—給窗口添加多個控件的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)添加小程序開發(fā)的知識,希望能夠幫助到大家!
