linux gtk IDE 程序设计(二)

                                       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等等的东西,我都不是很懂,所以需要查阅很多的资料,哎~
有点感觉路遥遥其修远兮的感觉
不过想想珠珠来提提神,感觉不错哈
以下是运行后的界面哈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值