每天進步一點點,用實際行動實現(xiàn)你偉大的夢想。
老規(guī)矩,先上代碼。


這節(jié)就講一個函數(shù)就ok了,這個牛逼的函數(shù)就是g_signal_connect();? 此函數(shù)將控件和事件處理函數(shù)聯(lián)系起來。上面代碼中g_signal_connect(button1, "clicked", G_CALLBACK (button1_handler), NULL); 就是將button1這個控件和button1_handler這個事件處理函數(shù)聯(lián)系起來。這個函數(shù)的API參考如下:

? 第一個參數(shù)是控件實例,這里是button1,第二個參數(shù)是信號實例clicked,第三個參數(shù)是事件處理函數(shù)GCallback,這里是button1_handler,最后一個參數(shù)是額外數(shù)據(jù)NULL。
其中需要注意的是第三個參數(shù)這里寫的是G_CALLBACK (button1_handler),因為button1_handler本質(zhì)上只是一個函數(shù)而不是GCallback,我們先搞清楚GCallback是什么,參考官方文檔如下:

? 注意看最后一句話,使用G_CALLBACK()將回調(diào)函數(shù)轉換為GCallback。我們繼續(xù)看G_CALLBACK()。

? 原來G_CALLBACK()是用于將函數(shù)轉換成GCallback的宏定義。
? g_print("Hello World\n");? 是將參數(shù)輸出到stdout(標準輸出),需要自行添加\n來實現(xiàn)分行,也不適合用于(debug)調(diào)試。參考文檔如下。

? 下面再來深入分析下g_signal_connect()和事件處理函數(shù)之間的關系,上圖。

? 圖中箭頭雙方都是相互關聯(lián)的?,F(xiàn)在就很清楚了吧。
? 下節(jié)教程將介紹各種布局的使用。