LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1224|回复: 7

gtk 多行文本框,有什么方法把文本框内的字符全部在bcd码和普遍字符间转换?

[复制链接]
发表于 2004-7-1 19:09:34 | 显示全部楼层 |阅读模式
谢谢
 楼主| 发表于 2004-7-1 19:27:19 | 显示全部楼层

  1. #ifdef HAVE_CONFIG_H
  2. #  include <config.h>
  3. #endif

  4. #include <gtk/gtk.h>

  5. #include "callbacks.h"
  6. #include "interface.h"
  7. #include "support.h"

  8. gint n = 0;        //选择端口标志数, 0=>com1, 1=>com2

  9. void
  10. on_comboboxentry1_changed              (GtkComboBox     *combobox,
  11.                                         gpointer         user_data)
  12. {
  13. //选择端口
  14. //        gint n = 0;
  15.         n = gtk_combo_box_get_active(combobox);
  16.         printf("%d\n",n);       
  17. }


  18. void
  19. on_button6_clicked                     (GtkButton       *button,
  20.                                         gpointer         user_data)
  21. {
  22. //打开串口
  23.         if(n+1 == 1)
  24.                 printf("button6: /dev/ttyS0\n");
  25.         else if(n+1 == 2)
  26.                 printf("button6: /dev/ttyS1\n");
  27. }


  28. void
  29. on_button7_clicked                     (GtkButton       *button,
  30.                                         gpointer         user_data)
  31. {
  32. //关闭串口

  33. }


  34. void
  35. on_button1_clicked                     (GtkButton       *button,
  36.                                         gpointer         user_data)
  37. {
  38. //清空发送文本框
  39.         gchar *str = "\0";
  40.       GtkWidget *w = NULL;
  41.         gpointer tv2;
  42.       w = gtk_widget_get_toplevel(GTK_WIDGET(button));
  43.       if (GTK_WIDGET_TOPLEVEL (w))
  44.       {
  45.                 tv2 = g_object_get_data (GTK_OBJECT(w), "textview2");
  46.             if (tv2 != NULL)
  47.             {
  48.                     gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv2)), str, strlen(str));
  49.             }
  50.       }
  51. }


  52. void
  53. on_button5_clicked                     (GtkButton       *button,
  54.                                         gpointer         user_data)
  55. {
  56. //接收文本框进制互换(十六《--》十)

  57. }


  58. void
  59. on_button4_clicked                     (GtkButton       *button,
  60.                                         gpointer         user_data)
  61. {
  62. //清空接收文本框
  63.         gchar *str = "\0";
  64.       GtkWidget *w = NULL;
  65.         gpointer tv1;
  66.       w = gtk_widget_get_toplevel(GTK_WIDGET(button));
  67.       if (GTK_WIDGET_TOPLEVEL (w))
  68.       {
  69.                 tv1 = g_object_get_data (GTK_OBJECT(w), "textview1");
  70.             if (tv1 != NULL)
  71.             {
  72.                     gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv1)), str, strlen(str));
  73.             }
  74.       }
  75. }


  76. void
  77. on_button2_clicked                     (GtkButton       *button,
  78.                                         gpointer         user_data)
  79. {
  80. //发送文本

  81. }


  82. void
  83. on_button3_clicked                     (GtkButton       *button,
  84.                                         gpointer         user_data)
  85. {
  86. //发送文本框进制互换
  87.         gchar *str1 = "\0", *str2 = "\0";
  88.       GtkWidget *w = NULL;
  89.         gpointer tv1;
  90. //        GtkTextIter        start, end;
  91.         gboolean over;

  92.       w = gtk_widget_get_toplevel(GTK_WIDGET(button));
  93.       if (GTK_WIDGET_TOPLEVEL (w))
  94.       {
  95.                 tv1 = g_object_get_data (GTK_OBJECT(w), "textview1");
  96.             if (tv1 != NULL)
  97.             {
  98.                         str1 = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv1));        //取得文本
  99.                         over = shi2hex(str1, str2);
  100.                     gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv1)), str2, strlen(str2));
  101.             }
  102.       }
  103. }


  104. void
  105. on_button8_clicked                     (GtkButton       *button,
  106.                                         gpointer         user_data)
  107. {
  108. //退出程序
  109. //此函数成功
  110.         gtk_main_quit();
  111. //        return FALSE;
  112. }


  113. gboolean
  114. on_window1_destroy_event               (GtkWidget       *widget,
  115.                                         GdkEvent        *event,
  116.                                         gpointer         user_data)
  117. {
  118. //本意也是退出程序,可是程序结束后,提示符没有返回。
  119.         gtk_main_quit();
  120.   return FALSE;
  121. }


  122. /*void
  123. on_comboboxentry1_changed              (GtkComboBox     *combobox,
  124.                                         gpointer         user_data)
  125. {

  126. }*/

  127. /*
  128. 十六进制转十进制 (16==bcd)
  129. 前二个参数一目了然,第三个为字符个数(以十进制为准)
  130. 返回值,真,成功;假,失败
  131. */
  132. gboolean hex2shi(GString *str_hex, GString *str_shi, unsigned int n)
  133. {

  134. }

  135. /*
  136. 十进制转十六进制 (16==bcd)
  137. 前二个参数一目了然,第三个为字符个数(以十进制为准)
  138. 返回值,真,成功;假,失败
  139. */
  140. gboolean shi2hex(gchar *str_shi, gchar *str_hex)
  141. {
  142.         unsigned int int_temp = 0;
  143.         while(*(str_shi++) != "\0")
  144.         {
  145.                 int_temp = *str_shi;
  146.                 *str_hex = (int_temp/10)*10;
  147.                 str_hex++;
  148.                 *str_hex = int_temp%10;
  149.                 str_hex++;
  150.         }
  151. }
复制代码

段错误
是,发送文本框进制转换,或者, shi2hex() 中的问题。
 楼主| 发表于 2004-7-1 19:46:22 | 显示全部楼层

  1. gboolean shi2hex(gchar *str_shi, gchar *str_hex)
  2. {
  3.         unsigned int int_temp = 0;
  4.         while(*str_shi != "\0")
  5.         {
  6.                 int_temp = *str_shi;
  7.                 *str_hex = (int_temp/10)*10;
  8.                 str_hex++;
  9.                 *str_hex = int_temp%10;
  10.                 str_hex++;
  11.                 str_shi++;
  12.         }
  13.         return TRUE;
  14. }
复制代码
发表于 2004-7-2 16:04:51 | 显示全部楼层
......
发表于 2004-7-2 16:06:23 | 显示全部楼层

Re:gtk 多行文本框,有什么方法把文本框内的字符全部在bcd码和普遍字符间转换?

GTK 内部使用utf-8编码。
gchar*      g_locale_from_utf8              ( const gchar *utf8string,
                                             gssize len,
                                             gsize *bytes_read,
                                             gsize *bytes_written,
                                             GError **error);
可将utf-8编码文本转化系统编码用于一般性处理。
如:
-------------------------------------------------------------
char * str1 = gtk_text_buffer_get_text(buffer,&iter,&iter2,-1) ;
_char_ptr = g_locale_from_utf8 ( str1,-1,NULL,NULL,NULL );
g_printf("str1 : %s \t new_text : %s \n",_char_ptr,_char_ptr );
-----------------------------------------------------------
发表于 2004-7-2 16:08:51 | 显示全部楼层
... ...
 楼主| 发表于 2004-7-2 17:27:27 | 显示全部楼层
啊。这个问题我没有说清楚。
是把可打印显示字符和非可显示字符<==与==>ascii 码值转换。
问题是:并不能知道文本框中字符串的大小。如果太大。有什么好的方法。
还有文本框,怎样加入自动换行功能?
发表于 2004-7-2 18:06:04 | 显示全部楼层
>是把可打印显示字符和非可显示字符<==与==>ascii 码值转换。
??
>问题是:并不能知道文本框中字符串的大小。如果太大。有什么好的方法。

获得(textbuffer)中的所有文本。返回的文本已分配空间,无须考虑大小。
__________________________________________________________
  GtkTextIter start ,end,iter;
  GtkTextView *textView=lookup_widget( GTK_WIDGET(this_widget),"textview1" );
  GtkTextBuffer *buffer=gtk_text_view_get_buffer(textView ) ;
   gtk_text_buffer_get_bounds (buffer, &start, &end);
  char * str1 = gtk_text_buffer_get_text(buffer,&iter,&iter2,-1) ;
____________________________________________________________
另外,buffer中的文本大小可用
gint        gtk_text_buffer_get_char_count  (GtkTextBuffer *buffer);
返回character数.
>还有文本框,怎样加入自动换行功能?
加入自动换行功能:
gtk_text_view_set_wrap_mode( textView, GTK_WRAP_WORD ) ;

----------
    相互帮助,共同进步。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表