GTK构件 — 文本视图控件GTKtextview

  文本视图控件(GtkTextView)是用以取代原有的文本编辑(GtkText)控件的,它包括一个文本缓冲区(GtkTextBuffer),用来保存文本控件显示的带有标记性的文字,且一个缓冲区支持多个显示;缓冲区文本的迭代(GtkTextIter),用来替代缓冲区的某一位置(首部、尾部、某一行等),以便向其中插入数据或控件;缓冲区的书签(GtkTextMark),表示缓冲区中的某一具体位置,以便进行滚动操作;缓冲区的文本标记(GtkTextTag),可以应用到缓冲区中文本的属性标记(如本例中的蓝色前景,居中等);缓冲区的标记表(GtkTextTagTable)联合多种文本属性标记一起使用。
  当文本视图缓冲区(GtkTextBuffer)光标发生变化时将触发mark_set信号。

1.相关接口函数

/*创建文本视图*/
GtkWidget*gtk_text_view_new (void)
/*获取文本视图缓冲区*/
GtkTextBuffer*gtk_text_view_get_buffer (GtkTextView *text_view)
/*获取缓冲区文本的起始位置和结束位置,start、end定义GtkTextIter 变量取地址传入即可*/
void gtk_text_buffer_get_bounds (GtkTextBuffer *buffer,GtkTextIter *start,GtkTextIter   *end)
/*像缓冲区插入数据*/
void gtk_text_buffer_insert (GtkTextBuffer *buffer,GtkTextIter *iter,const gchar *text,gint len)
形参:buffer --文本缓冲区iter  --插入数据位置,gtk_text_buffer_get_bounds获取的的位置text  --插入内容len  --插入的内容长度,填-1表示插入整个text
/*获取缓冲区的起始位置*/
void gtk_text_buffer_get_start_iter (GtkTextBuffer *buffer,GtkTextIter *iter)
/*获取缓冲区的结束位置*/
void gtk_text_buffer_get_end_iter (GtkTextBuffer *buffer,GtkTextIter *iter)
/*获取缓冲区的行数*/
gint gtk_text_iter_get_line (const GtkTextIter *iter)
/*获取缓冲区列数*/
gint gtk_text_iter_get_line_offset (const GtkTextIter *iter)
/*删除缓冲区中的内容,end填-1表示从start到缓冲区结束*/
gtk_text_buffer_delete (GtkTextBuffer *buffer,GtkTextIter *start,GtkTextIter *end)
/*获取字符数*/
gint gtk_text_buffer_get_char_count (GtkTextBuffer *buffer)

2.文本视图构件示例

#include <gtk/gtk.h>
#include <stdio.h>GtkTextBuffer *textbuffer;
GtkWidget*status;
guint statusbar_flag;void text_callback(GtkWidget *widget,gpointer data)
{GtkTextIter end;gtk_text_buffer_get_end_iter (textbuffer,&end);gint row = gtk_text_iter_get_line(&end);gint col = gtk_text_iter_get_line_offset(&end);int count=gtk_text_buffer_get_char_count(textbuffer);g_print("文本行:%d\t文本列:%d\t字数:%d\n",row,col,count);gchar buff[100];snprintf(buff,sizeof(buff),"行:%d\t列:%d\t字数:%d",row+1,col+1,count);gtk_statusbar_push (GTK_STATUSBAR (status),statusbar_flag,buff);
}   int main(int argc,char *argv[])
{GtkWidget *window;GtkWidget *text;GtkWidget *box;GtkTextIter start,end;gchar *buff;gtk_init(&argc,&argv);window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window),"文本");g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);gtk_window_set_default_size(GTK_WINDOW(window), 350, 300);/*创建纵向盒*/box=gtk_vbox_new(FALSE,0);gtk_container_add(GTK_CONTAINER(window),box);gtk_widget_show(box);/*创建文本框*/text=gtk_text_view_new();/*获取文本框缓冲区*/textbuffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));gtk_box_pack_start(GTK_BOX(box),text,TRUE,TRUE, 0);g_signal_connect(G_OBJECT(textbuffer),"mark_set", G_CALLBACK(text_callback),NULL);gtk_widget_show(text);/*创建状态栏*/status=gtk_statusbar_new();gtk_box_pack_start(GTK_BOX(box),status,FALSE,FALSE, 0);gtk_widget_show(status);/*获取状态栏标志*/statusbar_flag=gtk_statusbar_get_context_id (GTK_STATUSBAR(status) ,"TEXT VIEW");/*获取文本缓冲区的起始地址和结束地址*/gtk_text_buffer_get_bounds(textbuffer,&start,&end);/*插入内容*/gtk_text_buffer_insert(textbuffer,&start,"文本框使用示例!", -1);gtk_text_buffer_get_bounds(textbuffer,&start,&end);/*获取指定区域的文本内容*/buff=gtk_text_buffer_get_text(GTK_TEXT_BUFFER(textbuffer),&start,&end,FALSE);g_print("buff=%s\n",buff);/*设置文本内容*/gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer),"123456789",-1);/*获取缓冲区的起始位置和结束位置*/gtk_text_buffer_get_bounds(textbuffer,&start,&end);gtk_text_buffer_insert(textbuffer,&end,"\n文本框使用示例!123456789", -1);gtk_text_buffer_get_end_iter (textbuffer,&end);/*获取当前文本的行列*/gint row = gtk_text_iter_get_line(&end);gint col = gtk_text_iter_get_line_offset(&end);int count=gtk_text_buffer_get_char_count(textbuffer);g_print("文本行:%d\t文本列:%d\t字数:%d\n",row,col,count);gchar data[100];snprintf(data,sizeof(data),"行:%d\t列:%d\t字数:%d",row+1,col+1,count);/*将行、列、字数显示到状态栏*/gtk_statusbar_push (GTK_STATUSBAR (status),statusbar_flag,data);/*删除指定区域内容*///gtk_text_buffer_delete(textbuffer,&start,&end);gtk_widget_show(window);gtk_main();return 0;
}

GTK构件 --- 文本视图控件GTKtextview相关推荐

  1. android中的TextView组件,Android-TextView文本视图控件详解

    TextView是Android开发当中运用到最多的控件之一,显示一行或者多行文本,也可以给上下左右设置图片,并且结合SpannableString和其子类可以做到图文混排. TextView文本视图 ...

  2. VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)

    上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义.本节继续讲解下半部分,包括列表视图控件的创建.CListCtrl类的主要成员函数 ...

  3. linux sort -w32,WIN32汇编: 31.列表视图控件

    第三十一课 列表视图控件 本课中我们将学习如何创建和使用列表视图控件. 理论: 列表视图控件和树型视图.丰富文本编辑控件一样是通用控件的一种.可能您都已经知道了列表视图控件,只不过是不知道它的确切名字 ...

  4. CTreeCtrl::InsertItem给树形视图控件添加一个项目

    1:CTreeCtrl::InsertItem给树形视图控件添加一个项目 项目由HTREEITEM句柄来标识,并输入给InsertItem的参数之一是父项目的HTREEITEM句柄.创建子项目就是将一 ...

  5. 【Android从零单排系列十一】《Android视图控件——日历、日期、时间选择控件》

    目录 一.日历.日期.时间组件基本介绍 二.几种常见的控件类型 1.CalendarView –日历控件 2. DatePicker –日期选择控件 3.TimePicker –时间选择控件 4.Ch ...

  6. ScrollView 滚动视图控件

    为什么要用ScrollView 滚动视图控件 应为手机屏幕过小显示的内容过多没法显示完全所以要使用滚动视图控件 使用时的注意点 不用再ScrollView内部使用自带滚动条的控件或布局 ScrollV ...

  7. 自制单选多选日历文本框文本域控件

    /* ZZSWidget.js 版本号2021.06.29 目前共有单选.多选.日历.文本框.文本域.按钮 6个控件2021.06.29增加了单选.多选和日历控件的options的widgetPare ...

  8. Win32 树视图控件的基本使用

    首先参阅 https://blog.csdn.net/bcbobo21cn/article/details/106287676 认识Windows公共控件库的使用: 一 创建树视图 首先用如下代码看一 ...

  9. android富文本图片自适应,Android 图片混排富文本编辑器控件

    一.一个Android 图片混排富文本编辑器控件(仿兴趣部落) 1.1 图片混排富文本控件 是一种图片和文字混合在一起的控件,文本之间可以插入图片,类似于网页的排版样式. 1.2 该控件主要是仿兴趣部 ...

最新文章

  1. ros service
  2. linux rs232触摸屏驱动程序,Linux下的触摸屏驱动
  3. Centos7-通过RPM方式安装MySQL5.7
  4. 2007白领职场成功需要哪“十商”
  5. 四川汶川地震祈福赈灾宣传画、报纸头版精选第二版(超多图)
  6. 最短路径——Floyd算法及优化(蓝桥杯试题集)
  7. python安装包的方法
  8. VS2005中Build顺序的设定
  9. 【BZOJ1226】学校食堂(动态规划,状态压缩)
  10. 14个新鲜的免费图标集
  11. 游戏公司2022秋招记录
  12. Android 测试点归纳总结
  13. 【数码复印新生态】东芝泰格强势支持统信UOS
  14. 小型游戏《笑傲江湖之精忠报国》全过程_01
  15. 教你itunes电脑版怎么下载
  16. 通过终端安装dmg或者pkg文件
  17. 启科量子开源量子编程框架 QuTrunk
  18. thinkphp 3.2引入第三方类
  19. 谈谈创业这点事 专业的盲区
  20. ping oracle 地址,使用 ping 命令探测远程主机 - Oracle Solaris 管理:IP 服务

热门文章

  1. polar码译码——快速SC译码算法
  2. Word——删除最后一页空白页的方法
  3. xstream 对象 -》xml
  4. JavaMailSenderImpl 使用465端口配置
  5. 派森学python_派森个人学习笔记------2020.09.06
  6. 显著性检测——GR模型
  7. 很牛的几篇圈内爆料——影视圈
  8. IIS协议和UDA1341TS音频编解码芯片简述
  9. nginx配置访问白名单
  10. pvpgn mysql d2gs_pvpgn战网命令集