? 文本視圖控件(GtkTextView)是用以取代原有的文本編輯(GtkText)控件的,它包括一個文本緩沖區(qū)(GtkTextBuffer),用來保存文本控件顯示的帶有標(biāo)記性的文字,且一個緩沖區(qū)支持多個顯示;緩沖區(qū)文本的迭代(GtkTextIter),用來替代緩沖區(qū)的某一位置(首部、尾部、某一行等),以便向其中插入數(shù)據(jù)或控件;緩沖區(qū)的書簽(GtkTextMark),表示緩沖區(qū)中的某一具體位置,以便進(jìn)行滾動操作;緩沖區(qū)的文本標(biāo)記(GtkTextTag),可以應(yīng)用到緩沖區(qū)中文本的屬性標(biāo)記(如本例中的藍(lán)色前景,居中等);緩沖區(qū)的標(biāo)記表(GtkTextTagTable)聯(lián)合多種文本屬性標(biāo)記一起使用。
當(dāng)文本視圖緩沖區(qū)(GtkTextBuffer)光標(biāo)發(fā)生變化時將觸發(fā)mark_set信號。
1.相關(guān)接口函數(shù)
/*創(chuàng)建文本視圖*/
GtkWidget*gtk_text_view_new (void)
/*獲取文本視圖緩沖區(qū)*/
GtkTextBuffer*gtk_text_view_get_buffer (GtkTextView *text_view)
/*獲取緩沖區(qū)文本的起始位置和結(jié)束位置,start、end定義GtkTextIter 變量取地址傳入即可*/
void gtk_text_buffer_get_bounds (GtkTextBuffer *buffer,GtkTextIter *start,GtkTextIter *end)
/*像緩沖區(qū)插入數(shù)據(jù)*/
void gtk_text_buffer_insert (GtkTextBuffer *buffer,GtkTextIter *iter,const gchar *text,gint len)
形參:buffer --文本緩沖區(qū)
iter --插入數(shù)據(jù)位置,gtk_text_buffer_get_bounds獲取的的位置
text --插入內(nèi)容
len --插入的內(nèi)容長度,填-1表示插入整個text
/*獲取緩沖區(qū)的起始位置*/
void gtk_text_buffer_get_start_iter (GtkTextBuffer *buffer,GtkTextIter *iter)
/*獲取緩沖區(qū)的結(jié)束位置*/
void gtk_text_buffer_get_end_iter (GtkTextBuffer *buffer,GtkTextIter *iter)
/*獲取緩沖區(qū)的行數(shù)*/
gint gtk_text_iter_get_line (const GtkTextIter *iter)
/*獲取緩沖區(qū)列數(shù)*/
gint gtk_text_iter_get_line_offset (const GtkTextIter *iter)
/*刪除緩沖區(qū)中的內(nèi)容,end填-1表示從start到緩沖區(qū)結(jié)束*/
gtk_text_buffer_delete (GtkTextBuffer *buffer,GtkTextIter *start,GtkTextIter *end)
/*獲取字符數(shù)*/
gint gtk_text_buffer_get_char_count (GtkTextBuffer *buffer)
2.文本視圖構(gòu)件示例
#include
#include
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("文本行:%dt文本列:%dt字?jǐn)?shù):%dn",row,col,count);
gchar buff[100];
snprintf(buff,sizeof(buff),"行:%dt列:%dt字?jǐn)?shù):%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);
/*創(chuàng)建縱向盒*/
box=gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(window),box);
gtk_widget_show(box);
/*創(chuàng)建文本框*/
text=gtk_text_view_new();
/*獲取文本框緩沖區(qū)*/
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);
/*創(chuàng)建狀態(tài)欄*/
status=gtk_statusbar_new();
gtk_box_pack_start(GTK_BOX(box),status,FALSE,FALSE, 0);
gtk_widget_show(status);
/*獲取狀態(tài)欄標(biāo)志*/
statusbar_flag=gtk_statusbar_get_context_id (GTK_STATUSBAR(status) ,"TEXT VIEW");
/*獲取文本緩沖區(qū)的起始地址和結(jié)束地址*/
gtk_text_buffer_get_bounds(textbuffer,&start,&end);
/*插入內(nèi)容*/
gtk_text_buffer_insert(textbuffer,&start,"文本框使用示例!", -1);
gtk_text_buffer_get_bounds(textbuffer,&start,&end);
/*獲取指定區(qū)域的文本內(nèi)容*/
buff=gtk_text_buffer_get_text(GTK_TEXT_BUFFER(textbuffer),&start,&end,FALSE);
g_print("buff=%sn",buff);
/*設(shè)置文本內(nèi)容*/
gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer),"123456789",-1);
/*獲取緩沖區(qū)的起始位置和結(jié)束位置*/
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);
/*獲取當(dāng)前文本的行列*/
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("文本行:%dt文本列:%dt字?jǐn)?shù):%dn",row,col,count);
gchar data[100];
snprintf(data,sizeof(data),"行:%dt列:%dt字?jǐn)?shù):%d",row+1,col+1,count);
/*將行、列、字?jǐn)?shù)顯示到狀態(tài)欄*/
gtk_statusbar_push (GTK_STATUSBAR (status),statusbar_flag,data);
/*刪除指定區(qū)域內(nèi)容*/
//gtk_text_buffer_delete(textbuffer,&start,&end);
gtk_widget_show(window);
gtk_main();
return 0;
}
審核編輯:湯梓紅
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4284瀏覽量
62325 -
構(gòu)件
+關(guān)注
關(guān)注
0文章
14瀏覽量
7766
發(fā)布評論請先 登錄
相關(guān)推薦
評論