GTK 缓冲区

GTK 缓冲区转发 http blog sina com cn s blog 712a04260101 htmlGtk nbsp 学习笔记 19 nbsp nbsp 文本框构件 2013 04 1322 31 03 转载 标签 it 分类 Linux nbsp GtkTextView 代表了窗口中可见的文本框 用来显示 GtkTextBuffe

转发http://blog.sina.com.cn/s/blog_712a04260101atmq.html

Gtk+ 学习笔记19  –文本框构件

(2013-04-13 22:31:03)

标签:

it

分类: Linux
 

GtkTextView代表了窗口中可见的文本框,用来显示GtkTextBuffer.

GtkTextBuffer:文本框正文的缓冲区,文本框文字的插入、删除都是对这一类变量进行操作。

GtkTextIter保存文字在buffer中位置的结构。

GtkTextMark:A position in the buffer preserved across buffer modifications

GtkTextTag用来给指定的文字添加一些标记,改变指定区域的文字的显示效果。如:字体的颜色、大小的改变。

GtkTextTagTable:是GtkTextTag标记的集合表。

创建文本框构件

GtkTextView 它代表了窗口可见的文本框,有两种方法创建文本框,1)用默认的缓冲区创建文本框,用函数gtk_text_view_new,2)指定缓冲区来创建文本框,用函数gtk_text_view_new_with_buffer。

      gtk_text_view_new 创建一个新的文本框,如果没有在创建之前调用函数gtk_text_view_set_buffer来设置这个缓冲区,系统会创建一个空的默认的缓冲区,而我们可以用gtk_text_view_get_buffer来得到这个缓冲区。同样也可以用指定的缓冲区来创建文本框gtk_text_view_new_with_buffer。

buffer来指定这个缓冲区,如果buffer为NULL,那功能和gtk_text_view_new函数一样。

创建文本框的缓冲区gtk_text_buffer_new(Gtk_Text_Tag_Table *table),它需要指定文件构件的标签盒,当然也可以为空,让系统创建默认的文件构件标签盒,然后用get_text_buffer_get_tag_table(GtkTextBuffer *buffer)函数来获得标签盒。

文本框文字的插入和删除

对文本框文字的插入和删除之前都需要得到当前buffer中开始位置,结束位置的ITER,用gtk_text_buffer_get_bounds(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end),

缓冲区开始和结束位置的iter分别通过star和end参数得到。

之后就可以对文本框构件的正文进行操作了,gtk_text_buffer_insert(GtkTextBuffer *buffer, GtkTextIter *iter, const gchar *text ,gint len),向缓冲区插入文字。start,end分别为文本框文字开始位置和结束位置的iter,len是要插入文本的长度,可以是-1,表示插入text的所有内容。

gtk_text_buffer_delete(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end)缓冲区内容删除。start,end分别为文本框文字开始位置和结束位置的iter。

文本框缓冲区文本的获得和设置

gtk_text_buffer_get_text(GtkTextBuffer *buffer,const GtkTextIter *start,const GtkTextIter *end,gboolean include_hidden_chars)来获得文本框缓冲区的文本;

gtk_text_buffer_set_text(GtkTextBuffer *buffer,const gchar *text,gint len)对文本框缓冲区文本进行设置。会删掉原有缓冲区内容,用text的内容代替。

这是一个例子:

#include

GtkWidget *window;
GtkWidget *view;
GtkTextBuffer *buffer;
GtkTextIter *iter;
GtkWidget *button;
GtkWidget *box;
GtkWidget *button2;

void button_event(GtkWidget *widget, gpointer *data);
void button_event2(GtkWidget *widget, gpointer *data);

int main(int argc, char* argv[])
{

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_size_request(window,200,200);
    gtk_signal_connect(GTK_OBJECT(window),
            “destroy”,
            G_CALLBACK(gtk_main_quit),
            NULL);

    box = gtk_vbox_new(FALSE,0);
    gtk_widget_show(box);

    buffer = gtk_text_buffer_new(NULL);
    view = gtk_text_view_new_with_buffer(buffer);
    gtk_box_pack_start(GTK_BOX(box),view,TRUE,TRUE,10);
    gtk_widget_set_size_request(view,200,150);

    button = gtk_button_new_with_label(“enter”);
    gtk_signal_connect(GTK_OBJECT(button),
            “clicked”,
            GTK_SIGNAL_FUNC(button_event),
            NULL);
    gtk_box_pack_start(GTK_BOX(box),button,TRUE,TRUE,10);
    gtk_widget_show(button);

    button2 = gtk_button_new_with_label(“change”);
    gtk_signal_connect(GTK_OBJECT(button2),
            “clicked”,
            GTK_SIGNAL_FUNC(button_event2),
            NULL);
    gtk_box_pack_start(GTK_BOX(box),button2,FALSE,FALSE,10);
    gtk_widget_show(button2);

    gtk_container_add(GTK_CONTAINER(window),box);
    gtk_widget_show(view);
   
    gtk_widget_show(window);
    gtk_main();
    return 0;
}

void button_event(GtkWidget *widget,gpointer *data)
{

    const gchar *text=”HOW ARE YOU !”;
    GtkTextIter start,end;
    //获得缓冲区开始和结束位置的Iter
    gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer),&start,&end);
    //插入文本到缓冲区
    gtk_text_buffer_insert(GTK_TEXT_BUFFER(buffer),&start,text,strlen(text));
}

void button_event2(GtkWidget *widget, gpointer *data)
{

    gchar *text2;
    const gchar *text3=”I AM HERE FOR YOU ! \n”;
    GtkTextIter start,end;
   
    gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer),&start,&end);
    const GtkTextIter s=start,e=end;
    text2 = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(buffer),&s,&e,FALSE);
    g_print(“%s \n”,text2);

    gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buffer),text3,20);

}





















































































参考来源:

http://blog.csdn.net/byxdaz/article/details/

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225276.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:40
下一篇 2026年3月17日 上午9:41


相关推荐

  • linux镜像文件没有gho,【iso文件中没有gho文件】iso变gho_iso文件里没有gho-系统城…

    linux镜像文件没有gho,【iso文件中没有gho文件】iso变gho_iso文件里没有gho-系统城…2016-05-0119:20:51  浏览量:6833gho文件是ghost系统的克隆镜像,存储着系统分区的所有文件信息,可用于安装系统,有些U盘安装方法需要把ISO镜像中的gho文件拷贝到U盘,那么gho文件在哪里呢?ISO镜像中的gho文件是哪个呢?下面系统城小编就跟大家分析一下。2016-03-0319:44:18  浏览量:18623使用U盘pe启动盘安装系统时,只需把系统gho映像…

    2022年7月12日
    18
  • Claude Code × 智谱 BigModel 实战集成指南

    Claude Code × 智谱 BigModel 实战集成指南

    2026年3月12日
    4
  • 飞越650四轴无人机安装全程详解(多图)

    飞越650四轴无人机安装全程详解(多图)本文详细介绍了飞越 650Sport 四轴无人机安装全过程 并对安装过程中的注意事项做了总结说明 可以作为安装 650 四轴无人机的参考教程来使用 希望对想要入魔的童鞋有所帮助 试飞前的检查与试飞 调参步骤将另外总结发布

    2026年3月18日
    2
  • Linux – quota的举例说明

    实作Quota流程-1:文件系统支持[root@www~]#df-h/homeFilesystemSizeUsedAvailUse%Mountedon/dev/hda34.8G740M3.8G17%/home[root@www~]#mount|grephome/dev/hda3on/ho

    2022年4月6日
    63
  • hadoop使用教程_hadoop入门

    hadoop使用教程_hadoop入门Hadoop【大数据Hadoop系列】Hadoop2.X单机环境搭建【大数据Hadoop系列】Hadoop2.X集群环境搭建MapReduce【大数据Hadoop系列】分布式计算框架——MapReduceYARN【大数据Hadoop系列】Hadoop-YARN知识体系总结(2021版)【大数据Hadoop系列】集群资源管理器——YARNHDFS【大数据Hadoop系列】Hadoop-HDFS知识体系总结(2021版)【大数据Hadoop系列】Hadoop分

    2025年6月3日
    2
  • java 反编译器_代码反编译到数据库

    java 反编译器_代码反编译到数据库xjad反编译工具下载使用反编译时把class文件直接拖拽至工具内即可,如果反编译结果不对时把class文件重新去拿原始的不要编辑打开,或者放在一个文件夹内在试。反编译后的代码没有注释、注解等,反正能用得细心看看调整。点击下载工具http://a.xzfile.com/down2/XJadfanbinayi_downcc.zip…

    2022年8月20日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号