zoukankan      html  css  js  c++  java
  • 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)); 

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

  • 相关阅读:
    JQuery Mobile
    JQuery
    JQuery Mobile
    JQuery Mobile
    JQuery Mobile
    5G && 物联网
    Sass(Syntactically Awesome Stylesheets)——概述(待续)
    Sass(Syntactically Awesome Stylesheets)——使用React JS实现
    Yarn概述——FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT
    webpack——Modules && Hot Module Replacement
  • 原文地址:https://www.cnblogs.com/kingos/p/4550430.html
Copyright © 2011-2022 走看看