跟上一篇文章一樣,這是對於GTKmm練習的筆記,範本同樣來自於GTKmm開發團隊的Github。
由於已經說明過控件的創建方法以及打包方式,這次就簡潔紀錄一下的按鈕點擊事件的註冊流程,以及一個相當有趣的圖檔格式,
由文字所編排而成的文檔XPM格式;稍後會做說明。
編譯完的結果截圖
點擊按鈕,觸發回調函數MessageBox()
直接進入主題,看一下源碼,首先是buttons.h
#ifndef GTKMM_EXAMPLE_BUTTONS_H # define GTKMM_EXAMPLE_BUTTONS_H # include < gtkmm / window.h > #include < gtkmm / button.h > class Buttons: public Gtk::Window { //雖然取名叫做button,但其實是主窗口,同樣必須繼承至Gtk::Window public: Buttons(); virtual~Buttons(); protected: //Signal handlers: //宣告一個一定義的事件回調函數 void on_button_clicked(); //Child widgets: Gtk::Button m_button; //唯一的一個控件m_button }; #endif //GTKMM_EXAMPLE_BUTTON接著button.cpp
#include "buttons.h" #include <windows.h> //範例本來沒有的,這是為了MessageBoxW做測試 #include <iostream> Buttons::Buttons() { m_button.add_pixlabel("info.xpm", "cool button"); //這裡比較特殊,增加一個有圖示的Label,參數(圖檔,"文字") set_title("Pixmap'd buttons!"); //設定主要窗口Title set_border_width(10); //設定主要窗口與其他控件的間距 m_button.signal_clicked().connect( sigc::mem_fun(*this, //button有自定義函數signal.clicked(),綁定至自己的成員函數 &Buttons::on_button_clicked) ); add(m_button); //將配置完成的button控件放入主視窗中 show_all_children(); //顯示主視窗及所有控件 } Buttons::~Buttons() { } void Buttons::on_button_clicked() { MessageBoxW(NULL, (LPCWSTR)