今天被一个文本框坑了,基本设置什么的都对,但是就是无法显示中文,按钮名称都可以显示中文,先介绍下文本框的基本函数吧.
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));
不管有多少问题,都是要解决的,加油啊!