1. 程式人生 > >GTK+-3.0程式設計 (二) 為建立的視窗新增一個按鈕

GTK+-3.0程式設計 (二) 為建立的視窗新增一個按鈕

  僅僅建立一個空白視窗是不夠的,下面我們為建立的視窗新增一個按鈕。

以 Hello,World!為例。

首先建立一個原始檔:example2.c 內容如下。

#include  <gtk/gtk.h>

//點選按鈕後被呼叫的函式,用於輸出hello,world
static void print_msg (GtkWidget *button , gpointer data)
{
    printf("Hello , world!\n");
}

static void activate (GtkApplication *app , gpointer data)
{
    GtkWidget *win;
    
    //申明一個按鈕
    GtkWidget *button;
    //申明一個盒容器,用於容納按鈕,控制大小
    GtkWidget *button_box;

    win = gtk_application_window_new(app);

    gtk_window_set_title(GTK_WINDOW(win) , "Button test");
    gtk_window_set_default_size(GTK_WINDOW(win) , 200 , 200);

    //建立一個盒容器,並設定水平放置
    button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); //gtk_orientation_horizontal
    
    //將盒容器包含進window中
    gtk_container_add(GTK_CONTAINER(win) , button_box);

    //建立一個按鈕,並帶有“My button” 的標籤
    button = gtk_button_new_with_label("My button");
    
    //連線訊號,讓點選按鈕後,便呼叫 print_msg 函式
    g_signal_connect(button , "clicked" , G_CALLBACK( print_msg ) , NULL);
 
 //將按鈕放入盒容器中
    gtk_container_add(GTK_CONTAINER(button_box) , button);

    //顯示window及其所有控制元件
    gtk_widget_show_all(win);
}

int main(int argc , char **argv)
{
    GtkApplication *app;
    int app_status;

    app = gtk_application_new("org.gtk.exmple" , G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app , "activate" , G_CALLBACK(activate) , NULL);

    app_status = g_application_run(G_APPLICATION(app) , argc , argv);

    g_object_unref(app);

    return app_status;
}

  編譯,執行結果如下:


相關推薦

GTK+-3.0程式設計 () 建立視窗新增一個按鈕

  僅僅建立一個空白視窗是不夠的,下面我們為建立的視窗新增一個按鈕。 以 Hello,World!為例。 首先建立一個原始檔:example2.c 內容如下。 #include <gtk/gtk.h> //點選按鈕後被呼叫的函式,用於輸出hello,w

GTK+3.0相較與GTK+2.0建立盒的變化

在學習使用Glade軟體建立盒的過程中,發現GTK+3.0已經取消了gtk_hbox_new()和gtk_vbox_new(),只需要在常規選項裡面修改橫向和垂直即可。但為了弄懂GTK+3.0與GTK+3.0的不同,還是查閱了一些資源,主要區別如下: 一、GTK+2.0

Linux 下從頭再走 GTK+-3.0 ()

  僅僅建立一個空白視窗是不夠的,下面我們為建立的視窗新增一個按鈕。 以 Hello,World!為例。 首先建立一個原始檔:example2.c 內容如下。 #include <gtk/gtk.h> //點選按鈕後被呼叫的函式,用於輸出hello,world static v

Package gtk+-3.0 was not found in the pkg-config search path

path 二進制 all 項目 有時 rpm fedora ack share 問題描述:   在fedora21系統上通過rpmbuild構建fcitx的二進制包時出現以上錯誤,經老程序員指點:“是相應的開發包沒有安裝” 解決辦法:   yum installl gtk3

windows應用程式【建立視窗

我們在建立視窗時需要的過程  關於訊息迴圈 因為處理器同時只能執行一個程式 因此我們需要作業系統去排程程式 因此我們只是將訊息傳給作業系統 等待迴應從而由作業系統來顯示我們需要的視窗 wndproc() 視窗過程負責用來響應某一類視窗收到的各種Windows訊息

如何使用@vue/cli 3.0在npm上建立,釋出和使用你自己的Vue.js元件庫

譯者按: 你可能npm人家的包過成千上萬次,但你是否有建立,釋出和使用過自己的npm包? 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用於學習。 儘管我已經在工作上用了Vue.js一段時間,但我從不需要在npm上釋出元件。但最

OpenGL ES 3.0程式設計指南學習筆記 第6章 頂點屬性、頂點陣列和緩衝區物件

1)vec2等為float型,也就是著色語言預設為float操作。float,vec2,vec3,vec4 2)矩陣以列優先順序儲存,也就是說矩陣可以看做是由幾個列向量組成,例如;mat3 myMat3 = mat3(1.0, 0.0, 0.0,//First column

Ubuntu14.04下安裝Anaconda3-4.3.0後,無法建立虛擬環境的解決方法

    因為研究需要,涉及到了強化學習(Reinforcement Learning, RL)內容,繼而進入了一個充滿荊棘的的領域。    強化學習方面的書籍寥寥無幾,98年,Richard S. Sutton出版了他的強化學習導論第一版,即Reinforcement Lea

SDL系列講解(十建立視窗流程

專案合作 建立視窗時序圖 時序圖細節 看下建立視窗的流程圖,我們簡單說下過程。視窗建立,會先判斷是否進行了SDL_VideoInit,如果沒有,需要初始化。 完成了VideoInit的初始化後,我們使用LoadLibrary將andr

通俗易懂的 OpenGL ES 3.0)渲染三角形

前言 學習了OpenGL有一段時間,在繪製出屬於自己的三角形之前,會接觸許多理論上的知識。用簡單的方式寫下自己對OpenGL的一些見解。望大家取其精華去其糟粕 最終效果:改變背景色,並且繪製渲染一個暗紅色的三角形 必備知識 OpenGL需要我們至少設定一個

asp.net mvc 3.0詳細筆記__10__建立強型別檢視

歡迎一起來學習MVC 3.0,我們在一步一個腳印的做一個MVC 3.0的專案,期間會有很多值得探索的地方。將會學到Razor,Lampda,Entity Framework,LinqC#新特性等等知

iOS下OpenGL ES 3.0程式設計入門(一):構建Hello World環境

OpenGL ES簡介:      OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三維圖形 API 的子集,針對手機、PDA和遊戲主機等嵌入式裝置而設計。該API由Khronos集團定義推廣,Khronos是一個圖形軟硬體

java--建立一個帶預設構造方法(即無參構造)的類,在構造方法中列印一條訊息"Hello Constructor";再這個類新增一個過載構造方法,令其接收一個字串引數,將其一起打印出來

題目描述:建立一個帶預設構造方法(即無參構造)的類,在構造方法中列印一條訊息"Hello Constructor";再為這個類新增一個過載構造方法,令其接收一個字串引數,並在這個有參構造方法中把"Hello Constructor"和接收的引數一起打印出來。 //Person類 class Pe

java--建立一個帶預設構造方法(即無參構造)的類,在構造方法中列印一條訊息"Hello Constructor";再這個類新增一個過載構造方法,令其接收一個字串引數,將其一起打印出來

題目描述:建立一個帶預設構造方法(即無參構造)的類,在構造方法中列印一條訊息"Hello Constructor";再為這個類新增一個過載構造方法,令其接收一個字串引數,並在這個有參構造方法中把"Hello Constructor"和接收的引數一起打印出來。 //Perso

3.17 在叉樹中找到一個節點的後繼節點

【題目】:   現在有一種新的二叉樹節點型別如下:  1 public class Node{ 2 public int value; 3 public Node left; 4 public Node right; 5 pu

Java之建立一個帶預設構造方法(即無參構造)的類,在構造方法中列印一條訊息"Hello Constructor";再這個類新增一個過載構造方法,令其接收一個字串引數。

建立一個帶預設構造方法(即無參構造)的類,在構造方法中列印一條訊息"Hello Constructor";再為這個類新增一個過載構造方法,令其接收一個字串引數,並在這個有參構造方法中把"Hello Constructor"和接收的引數一起打印出來。 效果如下: 附上程

【分享】部落格美化(3)部落格新增一個漂亮的分享按鈕

  在前2篇部落格“部落格美化(1)基本後臺設定與樣式設定”與"部落格美化(2)自定義部落格樣式細節"中詳細介紹了部落格樣式設定的相關問題,當然可能是自己角度的問題,不是所有人都能完全搞明白,我個人的建議是,自己一邊改,一邊測試,只要花時間,肯定沒問題,想我這種js,css小白都可以慢慢修改一點,大家也都

vc視窗新增一個陰影或者毛玻璃背景

看到迅雷啊qq啊都實現了視窗的周圍有一層毛邊的玻璃背景,使原本單調的背景變的好看多了,就想著怎麼做了,終於在codeproject上找到了一個外國老寫的WndShadow類的,他主要是通過setwindowlong來獲取到主視窗的訊息。如視窗移動,縮小,變大等,獲取訊息做相

swt關閉視窗新增確認事件

shell.addShellListener(new ShellAdapter() {            public void shellClosed(ShellEvent e) {                MessageBox messagebox = new MessageBox(shell,

magento 支付方式新增一個 最大金額和最小金額的限制

在相應支付方式的etc/system.xml檔案裡新增如下程式碼即可(不填數字即不限制) <min_order_total> <label>Minimum Order Total</label> <frontend_type>text