Linux操作系統(tǒng)下GTK界面編程
今天,開始在工作之余,抽出時(shí)間來(lái)學(xué)習(xí)linux界面編程。我計(jì)劃在未來(lái)的半年內(nèi),學(xué)會(huì) linux下的GTK+界面編程。這個(gè)文檔作為我學(xué)習(xí)linux編程的***個(gè)文檔,我會(huì)盡量做的詳 細(xì)一點(diǎn)。我所用的linux版本是Red Hat 9.0。
***個(gè)程序——Hello,World
在開始寫***個(gè)程序之前,需要做一點(diǎn)基本操作。
我登陸linux使用的是root用戶(根用戶,也叫超級(jí)用戶)。所以,所有筆記中產(chǎn)生的截圖,均是root用戶下的。
一、在linux桌面點(diǎn)擊右鍵,在快捷菜單中選擇“新建終端”選項(xiàng),打開類似DOS的窗口。
二、使用mkdir命令創(chuàng)建一個(gè)文件夾,文件夾命名為gtkgui,命令輸入為:mkdir gtkgui
輸入完畢后敲回車鍵即可創(chuàng)建目錄gtkgui,需要注意的是該目錄的路徑是:/root/gtktui
三、使用cd命令進(jìn)入目錄gtkgui 命令輸入:cd gtkgui
輸入命令后敲回車鍵即可進(jìn)入目錄gtkgui
四、創(chuàng)建***個(gè)程序存放的目錄,和***步一樣,這次在gtkgui目錄下創(chuàng)建一個(gè)子目錄1gui 然后進(jìn)入1gui目錄。創(chuàng)建目錄命令:mkdir 1gui 進(jìn)入目錄命令:cd lgui 命令界面輸入。
(注意1gui***個(gè)字符是“一”,不是小寫的L)。
小提示:若你想查看當(dāng)前目錄的絕對(duì)路徑。可以在終端敲入命令:pwd
現(xiàn)在可以清楚的看到當(dāng)前工作目錄是“/root/gtkgui/1gui”。
五、編寫代碼,在開始寫***個(gè)程序之前,說(shuō)說(shuō)VI編輯器。假設(shè)要寫的程序是firstgui.c,則在終端中敲入 vi firstgui.c 然后回車,就進(jìn)入編輯文件firstgui.c狀態(tài)了,VI命令后面的文件若存在,則直接打開,若不存在,則新建一個(gè)。進(jìn)入文件編輯狀態(tài)后,必須按a鍵, 才可向文件輸入東西,當(dāng)編輯完后,按esc鍵退出編輯模式,再按shift+;鍵,***輸入wq(write and quit)退出 VI。好了,在寫程序中,再說(shuō)一遍就記住了。
1、 創(chuàng)建 firstgui.c并編輯它
命令:vi first.c 然后敲回車進(jìn)入編輯模式
必須先按下 a 鍵(還有其他的鍵也可(如i鍵),不過(guò)我覺(jué)得按下a鍵比較方便)才可輸入字符,現(xiàn)在按一下a鍵,終端變成圖1.8所示的效果。
按一下a鍵后(注意左下方有個(gè)--插入--),進(jìn)入編輯模式
現(xiàn)在開始輸入***個(gè)程序的代碼,代碼原型如下:
- #include
- int main(int argc,char*argv[])
- {
- GtkWidget *window;
- gtk_init(&argc,&argv);
- window=gtk_window_new(GKT_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window),”Hello,World”);
- gtk_widget_show(window);
- gtk_main();
- return 0;
- }
現(xiàn)在代碼輸入完畢,需要保存文件并推出編輯器,先按一下esc鍵退出編輯模式,然后按組合鍵:shift+;鍵 ***輸入wq并敲回車鍵就保存了文件并退出編輯模式了。退出VI后的界面如圖1.20所示。
使用ll命令(小寫的LL)查看剛才編寫的firstgui.c是否存在。
若想看文件內(nèi)容,使用cat firstgui.c 命令就可看到文件firstgui.c的內(nèi)容了。
六、編譯代碼
在終端敲入下列命令及參數(shù),編譯連接程序
命令及參數(shù):gcc firstgui.c -o firstgui `pkg-config --cflags --libs gtk+-2.0`
命令說(shuō)明: gcc 編譯命令
firstgui.c 源程序文件名
-o 編譯參數(shù),(不是0(零),是opq的o)
firstgui 編譯連接后的可執(zhí)行文件名,可以為任意合法的文件名
` 這個(gè)符號(hào)是和~呆在一起的那個(gè)鍵上,不要誤認(rèn)為是單引號(hào)‘
pkg后面與-config之間沒(méi)有空格
cflags 前面是兩個(gè)短線 --
libs前面也是兩個(gè)短線 --
七、運(yùn)行程序
鍵入 ./firstgui 后回車便可看到效果了。
需要注意的是,該程序當(dāng)你點(diǎn)擊窗口右上角上的小X關(guān)閉窗口時(shí),窗口倒是關(guān)閉了。但是程序還在運(yùn)行,你必須在終端下按組合鍵:Ctrl+c來(lái)關(guān)閉進(jìn)程。
八、程序分析
GtkWidget *window; 相當(dāng)于Windows下的
WNDCLASS
結(jié)構(gòu)體,不過(guò)window在此只是一個(gè)窗口指針,用于指向函數(shù)gtk_window_new()函數(shù)返回的窗口地址而已。
gtk_init(&argc,&argv);
初始化界面庫(kù)等一系列操作的函數(shù),當(dāng)其調(diào)用失敗時(shí),其將終止我們的程序,目前只要記住在編寫任何窗口函數(shù)之前,都保證該函數(shù)是***個(gè)被調(diào)用的就行了。
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
該函數(shù)創(chuàng)建一個(gè)新的GtkWidget對(duì)象(目前我認(rèn)為其就是創(chuàng)建了一個(gè)還沒(méi)有顯示的窗 口),并返回該對(duì)象的指針。該函數(shù)參數(shù)僅有兩個(gè),其中一個(gè)是上面的GTK_WINDOW_TOPLEVEL,表示創(chuàng)建一個(gè)“主窗口”,另一個(gè)則是 GTK_WINDOW_POPUP,表示創(chuàng)建一個(gè)彈出窗口。
gtk_window_set_title(GTK_WINDOW(window),”Hello,World”);該函數(shù)設(shè)置窗口的標(biāo)題。
gtk_widget_show(window); 該函數(shù)將窗口顯示出來(lái)。
gtk_main();該函數(shù)捕獲一些消息吧。在沒(méi)有調(diào)用函數(shù)gtk_main_quit()函數(shù)之前,即使你關(guān)閉窗口,進(jìn)程也不關(guān)閉的原因就在此。
八、總結(jié)
創(chuàng)建窗口主要步驟:
1、GtkWidget *window;
2、gtk_init(&argc,&argv);
3、windows=gtk_window_new(GTK_WINDOW_TOPLEVEL);
4、gtk_widget_show(window);
5、gtk_main();
***,注意編譯命令。后面的那些參數(shù)。
目前,X窗口(Xwindow)和GNU編譯系統(tǒng)已成為應(yīng)用linux或unix操作系統(tǒng)的計(jì)算機(jī)工作站和大型計(jì)算機(jī)上最主要的圖形用戶界面系統(tǒng)。而GTK正是兩者結(jié)合的編程開發(fā)包,它比以往用的Xwindow/Motif編程更為簡(jiǎn)單方便,功能也很強(qiáng)大。所以,我想會(huì)有著較好的應(yīng)用前景。這是我的心得體會(huì),希望能夠?qū)Υ蠹矣兴鶐椭?/P>
【編輯推薦】