歷時(shí)五六個(gè)小時(shí),又是百度谷歌,幫助手冊(cè),入門教程什么一通查找,說是模塊其實(shí)也就一個(gè)文件不到兩百行代碼。
比想象中要順利,也學(xué)到了不少。
1,帶有滾動(dòng)條的多行文本框
只要gtk_scrolled_window_new生成一個(gè)滾動(dòng)窗口,在其上加上textview控件即可gtk_container_add,特點(diǎn)是當(dāng)textview足夠顯示的時(shí)候,滾動(dòng)條不可見,否則自動(dòng)產(chǎn)生(垂直和橫向),而且也隨著輸入一起下滾顯示。這個(gè)暫不知道怎么設(shè)置。
GtkWidget *scroll = gtk_scrolled_window_new(NULL,NULL);
GtkWidget *textview = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(scroll),textview);
textview總是要與一個(gè)textbuffer關(guān)聯(lián):
GtkTextBuffer *buffer = gtk_text_buffer_new(NULL);
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
2,控件焦點(diǎn)設(shè)置
gtk_widget_grab_focus,當(dāng)entry控件使用時(shí),會(huì)選中控件內(nèi)輸入。
3,局部快捷鍵設(shè)置
GtkAccelGroup *group = gtk_accel_group_new();快捷鍵組?
gtk_window_add_accel_group(GTK_WINDOW(window),group);添加快捷鍵組到窗體
gtk_widget_add_accelerator(butQuery,"clicked",group,GDK_KEY_Return,(GdkModifierType)0,GTK_ACCEL_VISIBLE);快捷鍵注冊(cè),其實(shí)就是當(dāng)快捷鍵按下的時(shí)候,為控件觸發(fā)一個(gè)信號(hào)
(GdkModifierType)0為不使用修飾鍵
4,從glade文件添加控件,該控件是已經(jīng)生成了的,只需用個(gè)指針接受對(duì)象
GtkBuilder *builder;
builder = gtk_builder_new();
gtk_builder_add_from_file(builder,"youdao.glade",NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder,"window"));
。。。
g_object_unref(G_OBJECT(builder));撤銷關(guān)聯(lián)?
5,選項(xiàng)卡控件(稱為notebook控件)
特點(diǎn):notebook控件作為一個(gè)容器,每一個(gè)標(biāo)簽頁用一個(gè)widget作為其標(biāo)簽名,一個(gè)widget作為其標(biāo)簽內(nèi)容
添加一個(gè)標(biāo)簽頁:gtk_notebook_append_page
注意:不能刪掉一個(gè)notebook控件的所有標(biāo)簽頁(顯示的時(shí)候沒效果)
標(biāo)簽頁的序號(hào)(使用gtk_notebook_get_nth_page獲得):
動(dòng)態(tài)增減標(biāo)簽頁的時(shí)候,標(biāo)簽頁的序號(hào)似乎工作不正常。
最后使用的辦法是,使用gtk_noteboo_prepend_page向前添加,再使用-1參數(shù)gtk_notebook_remove_page從后逐個(gè)刪掉以替換掉之前的標(biāo)簽頁。
應(yīng)該有更好的方法吧?
刪掉一個(gè)標(biāo)簽頁的時(shí)候,使用gtk_widget_queue_draw(GTK_WIDGET(noteBook));重畫控件,不太明白。
6,消息對(duì)話框(message dialog)
int ret;
GtkWidget *dialog;
dialog = gtk_message_dialog_new(GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_OK,
"%s",msg);
gtk_window_set_title(GTK_WINDOW(dialog),"Warning");
ret = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
特點(diǎn):在gtk_dialog_run函數(shù)里堵塞,直到用戶關(guān)掉了對(duì)話框才返回,其返回值暫沒研究。
明天就可以開始感覺最具難度的html解析模塊的設(shè)計(jì)編寫了。
鍵盤昨晚吃了點(diǎn)八寶粥,有幾個(gè)鍵特別蛋疼的按了一天。
2011-11-15
7,關(guān)于.glade文件(2011-11-18)
今天才發(fā)現(xiàn)原因.glade文件是程序運(yùn)行的時(shí)候才載入的。那是一個(gè)XML文件。
使用這個(gè)界面設(shè)計(jì)器還要裝上一個(gè)libglade2-0的庫。