linux gtk IDE 程式設計(二)

來源:互聯網
上載者:User
                                       linux gtk IDE 程式設計(二)
                                                                                                           flyli
今天早上7點中在睡夢中的我就收到了珠珠(我女朋友哈,是我第一個喜歡的女朋友,今年一起去北京比賽後,她回了家,我回到了學校,呵呵,程式員要想找個好老婆不容易阿,要珍惜才是,您說是不?)的簡訊,說今天他去寺廟抽籤,抽的是因緣簽,沒好意思讓人給解簽,結果就把簽發過來,讓我在網上解。

一查,哇靠,上上籤啊~呵呵

上面說
君垂思澤潤無邊,覆禱祈禳沒黨偏;
一切有情皆受用,均占樂利得周全。

看了看網上的解簽,覺得很簡陋,自己也學過文言文的嘛,所以自己也可以解一點,不過發覺古人真的是很狡猾阿,這種簽貌似可以有很多中解法,然後再看著別個的臉色,基本就能解出比較真實的簽了。。。

不過怎麼說也是個上上籤,因為珠珠有點迷信的哈,所以抽了這種上上籤應該是很有促進作用的哈

不過樂規樂,學習還是要繼續的,要不以後沒錢養老婆讓老婆跟著受罪,那可是男人的恥辱阿。。。

今天對這個IDE中比較重要的部分,代碼框進行了編寫,我用的是gtk的text_view組件,一個好的編寫框肯定是需要周圍有捲軸的,要不這麼小的一個文字框肯定是不夠進行代碼書寫的了,text_view本生已經具有基本的文本編輯功能,但是當書寫文本超過本生的大小的時候,其自己會自動的進行放大,但是它無限制的放大,會導致真箇IDE介面的破壞,於是我們必須加個東東對其進行約束,也就是加上所謂的捲軸

在寫這段代碼之前,我覺得捲軸應該是text_view的一個屬性,假如設定了就會有,但是在實際的查閱資料中發現,其實是把text_view放到了一個捲軸容器裡,這樣當text_view放大的時候,捲軸容器就會對根據text_view的大小進行設定,我覺得這個是個很巧妙的方法,呵呵,gtk很聰明啊,呵呵
這個捲軸容器用的是gtkscrolledwindow查閱其mannal可以得到他的所有使用方法,我在這裡對最簡單的使用方法進行舉例說明
建立當然是最初需要做得哈
view_scroll = gtk_scrolled_window_new(NULL,NULL);
然後進行設定
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
這樣的設定可以是捲軸進行自動的調整,當然也有別的選擇哈,詳細的請看mannal
然後將text_view組件放到這個設定好的容器裡就可以了
    gtk_container_add (GTK_CONTAINER (view_scroll), view)
最後把view_scroll放到想讓他顯示的地方顯示出來就就可以了哈,很簡單的

以下是我目前的所有代碼,本來我是習慣用工程編譯的,但是在linux下我還不知道怎麼進行多檔案編譯,慚愧阿,還需要繼續學習哦~
#include <gtk/gtk.h>

/*=============================*/
/*definition space             */
/*=============================*/
#define MAIN_WINDOW_WIDTH 790
#define MAIN_WINDOW_HIGH  590
/*=============================*/
/*the place of fuction declear */
/*=============================*/
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data);
void init_show(void);

/*==============================*/
/*global symbol declear         */
/*==============================*/
GtkWidget* main_window;
GtkWidget* window;
GtkWidget* main_menu;
GtkWidget* main_menu_bar;
GtkWidget* main_file_item;
GtkWidget* view;
GtkWidget* table;
GtkWidget* view_scroll;
GtkWidget* main_menu_box;
GtkWidget* project_box;
GtkWidget* debug_box;
GtkWidget* view_box;
GtkWidget* default_box;
GtkWidget* menu_items;
GtkWidget* tmp1;
GtkWidget* tmp2;
GtkWidget* tmp3;
GtkWidget* tmp4;
int main(int argc, char* argv[])
{

    /*init*/
    gtk_init(&argc,&argv);
    /*create the MainWindow*/
     main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    main_menu = gtk_menu_new();
    view_scroll = gtk_scrolled_window_new(NULL,NULL);
    tmp1 = gtk_button_new_with_label("project_space");
    tmp2 = gtk_button_new_with_label("debug_space");
    tmp3 = gtk_button_new_with_label("default_space");
    tmp4 = gtk_button_new_with_label("view_space");
    main_menu_box = gtk_hbox_new(FALSE,0);
    project_box = gtk_hbox_new(FALSE,0);
    debug_box = gtk_hbox_new(FALSE,0);
    view_box = gtk_hbox_new(FALSE,0);
    default_box = gtk_hbox_new(FALSE,0);
    view = gtk_text_view_new();

    /*set attribute*/
    gtk_window_set_title(GTK_WINDOW(main_window),"flyli");
    gtk_window_set_default_size(GTK_WINDOW(main_window),MAIN_WINDOW_WIDTH,MAIN_WINDOW_HIGH);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

    /*set menu*/
    main_file_item = gtk_menu_item_new_with_label("file");
    gtk_widget_show(main_file_item);

    menu_items = gtk_menu_item_new_with_label("open");
    gtk_menu_shell_append(GTK_MENU_SHELL(main_menu),menu_items);
    gtk_widget_show (menu_items);

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_file_item),main_menu);

    main_menu_bar = gtk_menu_bar_new();
    gtk_menu_shell_append(GTK_MENU_SHELL(main_menu_bar),main_file_item);
    gtk_widget_show(main_menu_bar);
    /*signal connect*/
    g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), "main_window");
    /*display set*/
    table = gtk_table_new(100, 100 , TRUE);
    gtk_container_add(GTK_CONTAINER(main_window), table);

    gtk_table_attach_defaults(GTK_TABLE(table), main_menu_box, 0,100, 0, 5);
    gtk_table_attach_defaults(GTK_TABLE(table), project_box, 0,15, 5, 100);
    gtk_table_attach_defaults(GTK_TABLE(table), debug_box  , 0,100, 85, 100);
    gtk_table_attach_defaults(GTK_TABLE(table), default_box, 85,100,5,85);
    gtk_table_attach_defaults(GTK_TABLE(table), view_scroll   , 15,85,5,85);

    gtk_container_add (GTK_CONTAINER (view_scroll), view);
    gtk_box_pack_start(GTK_BOX(project_box), tmp1, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(debug_box)  , tmp2, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(default_box), tmp3, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(main_menu_box),main_menu_bar,TRUE, TRUE, 0);
    /*show*/
    init_show();
    gtk_main();
    return 0;
}

/*=================================*/
/*a common function to answer the  */
/*window_main                      */
/*=================================*/
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data)
{
    if(data = "main_window")
    {
      g_print("main_window send quit!/n");
    }
    gtk_main_quit();
    //gtk_widget_destroy(widget);
    return FALSE;
}
void init_show(void)
{
   gtk_widget_show(main_window);
   gtk_widget_show(table);
   gtk_widget_show(main_menu_box);
   gtk_widget_show(project_box);
   gtk_widget_show(debug_box);
   gtk_widget_show(view_box);
   gtk_widget_show(default_box);
   gtk_widget_show(tmp1);
   gtk_widget_show(tmp2);
   gtk_widget_show(tmp3);
   gtk_widget_show(tmp4);
   gtk_widget_show(view);
   gtk_widget_show(view_scroll);
   gtk_widget_show(view);
}
高手看了上面的代碼肯定是充滿鄙視的,其實我也知道,全是全域變數,明顯的不對哈
而且代碼的模組話做得也不好,不過我現在是最初接觸gtk編程,我還沒有摸清怎樣的模組化會比較清晰,還有就是那些變數需要全域,那些需要局部,以及檔案間的私人變數的書寫,還有命名規範等,都還沒有摸索清楚,不過相信我,我會摸索的很快的呵呵,不要鄙視我哈

下一步需要做的就是學會gcc的多檔案編譯,和linux的檔案操作方法了,多檔案編譯好像牽扯到makefile等等的東西,我都不是很懂,所以需要查閱很多的資料,哎~
有點感覺路遙遙其修遠兮的感覺
不過想想珠珠來提提神,感覺不錯哈
以下是運行後的介面哈

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.