http://bbs2.chinaunix.net/viewthread.php?tid=708972
1.将文本内容显示到textview控件上
********************************
文本变量类型为gchar text[]=~~或是将文件内容读出这里
gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview1)),_(text),-1);

=================================================================================
gchar *data;
GtkTextIter start,end;
gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview1)),&start);
设置textview1的起始点到&start中
gtk_text_buffer_get_end_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview1)),&end);
设置textview1的终点到&end中
data=gtk_txt_buffer_get_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview1)),&start,&end,FLASE);
将textview1文本域中从起始点到终点,如果包含隐藏的文件则加参数FLASE,否则加TURE

将textview1文本域中的内容读出来,放到data中



2.entry控件
***************
const char *getText;
gtk_entry_set_text(entry1,"abc");
getText=gtk_entry_get_text(GTK_ENTRY(entry1));

================================================

3.combo下拉菜单控件
**********************
combo1=lookup_widget((GtkWidget *)window1,"combo1");
gchar q[10][10];
Glist * glist=NULL;     glist类似java中迭代器
gint n;
strcpy(q[0],"aaaa");                                            设置下拉菜单内容
strcpy(q[1],"bbbb");~~~~~~
for(n=0;n<10;n++)
   {
    glist(g_list_append(glist,q[n]));
}

gtk_combo_set_popdown_strings(GTK_COMBO(combo1),glist);

===========================================================================================

const char *getCurrent; 将combo中当前所选的项值取出交放到getCurrent里
getCurrent=gtk_entry_text(GTK_ENTRY(GTK_COMBO(combo1)->entry))   

======================================================================================
Glist *glist=NULL;
gchar q[20][20];
//将以上两条语句放到clicked事件外,每次就不用循环来迭代glist否则
static gint n; ///for(i=0;i<=n;i++){glist=g_list_append(glist,q[i]);}
strcpy(q[n],gtk_entry_get_text(GTK_ENTRY(entry1)));
glist=g_list_append(glist,q[n]);
n++;
gtk_combo_set_popdown_strings(GTK_COMBO(combo1),glist);





4.label控件
**********************************
gtk_label_set_text(label1,"text");
gtk_label_get_text(GTK_LABEL(label1));


5.spinbutton控件显示时间

spinbutton1=lookup_widget(GTK_WIDGET(window1),"spinbuton1"); spinbuton2 ~~~~略
char *wday[]={"sun","mon","tue","web","thu","fri","sat"};
time_t timep;       时间类型变量定义
struct tm *p;       系统自定义用做存放时间参数的结构体
time(&timep);
p=localtime(&timep);
1900+p->tm_year //当前年 return int
1+p-tm_mon        //当前月 return int
p->tm_mday        //当前日 return int   //wday[p->tm_mday]

p->tm_hour        //当前小时   return int
p->tm_min       //当前分钟   return int
p->tm_sec       //当前秒 return int



6.fileselection控件得到文件绝对路径
******************************************************************************************
首先在glade-2中选择fileselection控件,并且在callback.c中lookup出

gtk_widget_show(window1);              / 可以设置窗口的显示和隐藏
gtk_widget_hide(fileselection1);
在显示filseselection1控件,将所文件的绝对路径设置到window1窗体的entry1控件显示
gtk_entry_set_text(GTK_ENTRY(entry1),gtk_file_selection_get_filename(fileselection1));


7.checkbutton控件状态的读取和设置
*******************************************************************************************
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton1));
///读取checkbutton状态,如果被选中则为TURE否则为FALSE
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton1),FALSE);   //设置没选中
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton1),TURE); //设置为选中
==========================================================================================
GTK_TOGGLE_BUTTON宏将构件转换为指向开关按钮的指针,然后访问开关按钮的结构的active域的值
以检测开关按钮的的状态

void toggle_button_callback(GtkWidget *widget)   ///widget为控件型数据 例如:要判断checkbutton1状态
         则可写成调用函数toole_button_callback(checkbutton1)
{
if(GTK_TOGGLE_BUTTON(widget)->active)
          {
/*如果按钮按下,执行这段程序*/
   }
else
      {
/*如果按钮弹起,执行这段程序*/
   }

}

注:toggle不仅可以检测checkbutton控件,也可以检测radio控件的状态及设置radio按钮的默认选择状态
例:gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton1),TURE);设置radiobutton1控件默认
为按下的状态
  


8.colorselectiondialog控件
**************************************************
功能:用来选择颜色


9.notebook控件中的label控件显示与隐藏控制及设置控件sensitive属性
********************************************************
   gtk_widget_set_sensitive(GtkWidget *widget,gboolean sensitive);
   *widget为要设置的控件名 sensitive为控件的状态   TRUE为用户可以点击 FALSE为灰色不可点击
------------------------------------------------------------------------------------------------
   例:在notebook控件中控制label页面的显示与隐藏 首先lookup出所用窗体后
   gtk_widget_set_sensitive(GTK_WIDGET(gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1),1)),FALSE);
gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1),1)为取notebook控件中哪个label
   (0--label1,1--label2 ~~~)上面语句控制label2中的内容不活跃,但label2标识不变灰

   gtk_widget_set_sensitive(GTK_WIDGET(label2),FALSE);
上面语句控制label2标识变灰,但其内容仍可操作
--------------------------------------------------------------------------------------------------
  
   gtk_widget_set_sensitive(GTK_WIDGET(gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1),1)),TRUE);
   gtk_widget_set_sensitive(GTK_WIDGET(label2),TRUE);
上两行语句将notebook窗体中的label2设置为活跃状态,解释同上
-----------------------------------------------------------------------------------------------------
   gtk_widget_hide(GTK_WIDGET(gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1),1)));
   gtk_widget_show(GTK_WIDGET(gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1),1)));
控制notebook1中,label2的状态是显示/隐藏


10.popupmenu控件
*************************************************************************************************
可设置一个按钮或是其它的事件来触发产生popupmenu控件,代码这样写
GtkWidget *menu1=create_menu1();
gtk_menu_popup(GTK_MENU(menu1),NULL,NULL,NULL,NULL,1,0); 下面是此函数的说明
----------------------------------------------------------------------------------------------
void        gtk_menu_popup    (GtkMenu *menu,
                              GtkWidget *parent_menu_shell,
                              GtkWidget *parent_menu_item,
                              GtkMenuPositionFunc func,
                              gpointer data,
                              guint button,
                              guint32 activate_time);

Displays a menu and makes it available for selection. Applications can use this function to display context-sensitive menus, and will typically supply NULL for the parent_menu_shell, parent_menu_item, func and data parameters. The default menu positioning function will position the menu at the current mouse cursor position.

The button parameter should be the mouse button pressed to initiate the menu popup. If the menu popup was initiated by something other than a mouse button press, such as a mouse button release or a keypress, button should be 0.

The activate_time parameter should be the time stamp of the event that initiated the popup. If such an event is not available, use gtk_get_current_event_time() instead.

menu : a GtkMenu.  
parent_menu_shell : the menu shell containing the triggering menu item, or NULL  
parent_menu_item : the menu item whose activation triggered the popup, or NULL  
func : a user supplied function used to position the menu, or NULL  
data : user supplied data to be passed to func.  
button : the mouse button which was pressed to initiate the event.  
activate_time : the time at which the activation event occurred.  
--------------------------------------------------------------------------------------------------

11.clist控件
*********************************************************************************************
   1.将数据写到clist控件中并设置背景颜色
GdkColor bkcolor; //GdkColor为定义颜色的结构体
bkcolor.red=12345; //调配颜色设置RGB
bkcolor.green=12345;
bkcolor.blue=12345;
gchar q[80][80],*testClist[80][1]; //如果有多行多列则应该定义为testClist[80][80]
int i;   
for(i=0;i<50;i++)
   {
strcpy(q[i],"clist1");
testClist[i][0]=q[i];
gtk_clist_append(GTK_CLIST(clist1),testClist[i]);
gtk_clist_set_background((GtkCList *)clist1,i,&bkcolor);
   }
2.在clist的select_row的事件里
   char *dirText;
   gtk_clist_get_text(GTK_CLIST(clist),row,column,&dirText);   //将所选行内容存入dirText中
   puts(dirText);
   注:在些事件里,还有row ,column~~~其它的数据可直接用

3.gtk_clist_clear(clist1);为清除clist1所有行的内容
    gtk_clist_remove(GTK_CLIST(clist1),0)   清除clist1中第0行的内容
    gtk_clist_insert(GTK_CLIST(clist1),0,&p); //p为一个指向字符串指针 gchar *p;

4.gtk_clist_get_text(GTK_CLIST(clist1),row,column,&text); ///读指定行文本char *text;

   gtk_clist_set_column_justification( GtkCList *clist,gint column,GtkJustification justification );
    参数GTK_JUSTIFY_CENTER为居中

   gtk_clist_moveto( GtkCList *clist,gint row,gint column,gfloat row_align,gfloat col_align );
移动到指定行,指定列,row_align和col_align改为0.5



12.读指定目录下的信息
******************************************************************************************
所需库:"unistd.h" "dirent.h   "sys/stat.h"   "sys/type.h"
DIR *dir;
struct dirent *ptr; //目录操作结构体
struct stat buf; //文件状态判断结构体
dir=opendir(dirAdd); //dirADD为一个存入目录信息的字符串
while((ptr=readdir(dir))!=NULL)
{
stat(prt->name,&buf);    //ptr->d_name为取每条信息名,包括目录和文件
if(S_ISDIR(buf.st_mode)) //判断是否为目录
   {
      //如果是目录做处理
          }
else
   {
//否则是文件做文件的处理
      }

}



13.随某事件创建一个窗口,在窗口内动态的生成控件(这里为entry)
***************************************************************************************
前提条件是,如果一个是主窗体的,发出某一事件调另一窗体的话,则事先在glade-2画图时,应该把
两个窗体都画出,在主窗中可先不用代码创建窗口2,可用事件创建,在画图时窗口2中需要放置一个
tabel控件(可做定位用)*并且table在放置到窗体的时候,下面不铺pix,否则有可能产生在窗体内
创建的文本框输入值读取时出错!!* 页面可分隔成块,其它的不动态生成控件的地方可铺pix

GtkWidget *tabel1;
tabel1=lookup_widget((GtkWidget *)window2,"tabel"); /window2为新创建出的窗体名
entry=gtk_entry_new_with_max_lenth(100); //创建新的entry窗体长度为100   *entry定义为全局变量
gtk_table_attch(GTK_TABLE(tabel1),entry,0,1,0,1,
                (GtkAttachOption) (GTK_FILL),    //将entry窗体放到tabel中
    (GtkAttachOption) (0),0,0);
gtk_widget_show(entry);      


14.为控件添加鼠标双击(三击~~)事件处理
********************************************************************************
在用glade-2画图的时候,为控件添加一个button_press_event事件,便包含三个函数,其中用
event参数实现击键的判断

if(event->type==GDK_2BUTTON_PRESS) //GDK_3BUTTON_PRESS为鼠标三击事件~~~~
   {
//处理双击事件
   }


15.
*********************************************************************************
system(字符串)包含在<signal.h>中



16.屏蔽控件


gtk_signal_handler_unblock_by_func(GTK_OBJECT(控件名),
                                    GTK_SIGNAL_FUNC(callback中控件的事件名),
                                    user_data);
gtk_signal_handler_unblock_by_func(GTK_OBJECT(cobSD),
                                    GTK_SIGNAL_FUNC(on_cobSD_changed ),
                                    user_data);



这些也都是我自己在实际的工作常用到一些,东西,也是我最开始学习gtk的时候,记的些东西
我想算是个常用的命令速查吧。。。。再后来,就没有时间去添些东西了。。。如果大家也有此
类东西的话,也拿来一起分享吧。

我先抛砖了。。。