gtk+学习笔记(七)

今天被一个文本框坑了,基本设置什么的都对,但是就是无法显示中文,按钮名称都可以显示中文,先介绍下文本框的基本函数吧.

GtkWidget *gtk_text_view_new(void);新建一个文本框,gtk_text_view_new创建一个新的缓冲区,如果你没有在创建之前调用函数gtk_text_view_set_buffer来设置这个缓冲区,那么系统将创建一个空的默认的缓冲区,我们可以用gtk_text_view_get_buffer来得到这个缓冲区。如果你用你自己的缓冲区来创建文本框可以用gtk_text_view_new_with_buffer.

gtk_text_view_new_with_buffer用指定的缓冲区创建一个新的文本框,我们用buffer来指定这个缓冲区,一个缓冲区能够被许多的构件共享。buffer可以为NULL,功能和gtk_text_view_new函数一样。

 可以用gtk_text_view_new创建默认缓冲区的文本框,用gtk_text_view_get_buffer来得到这个缓冲区。

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

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

文本构件是一种动态重绘自身的构件 ,它会在 gtk_main( )函数之外重绘构件。这意味着文本构件内的所有变化都会立即生效。如果文本构件内的变化很多时,可能会引起闪烁。要在文本构件内的文本变化较大时不让构件 重绘,可以先“冻结”构件,临时停止动态重绘本身,等构件内的更新结束时,再将构件“解冻”。相关函数为:

gtk_text_freeze用来将构件“冻结”,停止其自动重绘,此时GtkText构件内显示的内容将不会被更新

gtk_text_thaw用来为构件“解冻”,使其恢复自动更新功能

gtk_entry_set_editable:设置编辑框是否可编辑

下面贴上可以实现的一段代码,(无法读取文件中的汉字)

 1 text=gtk_text_new(NULL,NULL); 
 2 gtk_text_set_editable(GTK_TEXT(text),TRUE); 
 3 gtk_table_attach(GTK_TABLE(table),text,0,1,0,1,GTK_EXPAND | GTK_SHRINK | GTK_FILL,GTK_EXPAND | GTK_SHRINK | GTK_FILL,0,0); 
 4 gtk_widget_show(text); 
 5 /* 添加滚动条 */ 
 6 vscrollbar=gtk_vscrollbar_new(GTK_TEXT(text)->vadj); 
 7 gtk_table_attach(GTK_TABLE(table),vscrollbar,1,2,0,1,GTK_FILL,GTK_EXPAND | GTK_SHRINK | GTK_FILL,0,0); gtk_widget_show(vscrollbar); 
 8 /* 取得系统颜色映射,将映射设置为红色 */ 
 9 cmap=gdk_colormap_get_system(); 
10 color.red=0xffff; 
11 color.green=0; 
12 color.blue=0; 
13 if(!gdk_color_alloc(cmap,&color))
14 { 
15     g_error("could not allocate color
");
16 } /*加载固定字体 */ 
17 fixed_font=gdk_font_load(",-misc-simsun");
18  /* 添加文本到框中 */ 
19 gtk_widget_realize(text); 
20 /*冻结text构件,准备多行更新 */ 
21 gtk_text_freeze(GTK_TEXT(text)); 
22 /* Insert some colored text */ 
23 gtk_text_insert(GTK_TEXT(text),NULL,&text->style->black,NULL,"supports ",-1); 
24 gtk_text_insert(GTK_TEXT(text),NULL,&color,NULL,"colored ",-1); 
25 gtk_text_insert(GTK_TEXT(text),NULL,&text->style->black,NULL,"text and different ",-1); 
26 gtk_text_insert(GTK_TEXT(text),fixed_font,&text->style->black,NULL,"fonts

 ",-1); 
27 /* 加载文件到框中 */ 
28 infile=fopen("txt.txt","r"); 
29 if(infile)
30 { 
31 char buffer[1024]; 
32 int nchars; 
33 while(1)
34 { 
35 nchars=fread(buffer,1,1024,infile); 
36 gtk_text_insert(GTK_TEXT(text),fixed_font,NULL,NULL,buffer,nchars); 
37 if(nchars<1024) 
38 break; 
39 } 
40 fclose(infile); 
41 } 
42 /* 将text构件解冻,让变化显示出来 */ 
43 gtk_text_thaw(GTK_TEXT(text)); 

不管有多少问题,都是要解决的,加油啊!

原文地址:https://www.cnblogs.com/kingos/p/4550430.html