// コールバック関数を使うための準備
#include "modclbk.as"
newclbk3 cb_win_delete_event, 3, *on_win_delete_event, CLBKMODE_CDECL@
newclbk3 cb_btn1_clicked, 2, *on_btn1_clicked, CLBKMODE_CDECL@
newclbk3 cb_btn2_clicked, 2, *on_btn2_clicked, CLBKMODE_CDECL@
newclbk3 cb_btn3_clicked, 2, *on_btn3_clicked, CLBKMODE_CDECL@
// GTK+の関数を使うための準備
#uselib "libgtk-3-0.dll"
#func global gtk_init "gtk_init" sptr, sptr
#func global gtk_window_new "gtk_window_new" int
#func global gtk_container_set_border_width "gtk_container_set_border_width" sptr, int
#func global gtk_container_add "gtk_container_add" sptr, sptr
#func global gtk_widget_show_all "gtk_widget_show_all" sptr
#func global gtk_main "gtk_main"
#func global gtk_main_quit "gtk_main_quit"
#func global gtk_box_new "gtk_box_new" int, int
#func global gtk_box_pack_start "gtk_box_pack_start" sptr, sptr, int, int, int
#func global gtk_button_new_with_label "gtk_button_new_with_label" sptr
#func global gtk_button_new_from_stock "gtk_button_new_from_stock" sptr
#func global gtk_button_new_with_mnemonic "gtk_button_new_with_mnemonic" sptr
#func global gtk_container_get_children "gtk_container_get_children" sptr
#func gtk_widget_override_font "gtk_widget_override_font" sptr, sptr
#uselib "libgobject-2.0-0.dll"
#define g_signal_connect(%1, %2, %3, %4) g_signal_connect_data %1, %2, %3, %4, 0, 0
#func global g_signal_connect_data "g_signal_connect_data" sptr, str, sptr, sptr, int, int
#uselib "libpango-1.0-0.dll"
#func pango_font_description_from_string "pango_font_description_from_string" str
#uselib "libglib-2.0-0.dll"
#func global g_list_nth_data "g_list_nth_data" sptr, int
// よく使う関数
#include "hspinet.as"
#module
#defcfunc u str chars_ ; shift-jis文字列をutf-8に変換
chars = chars_
nkfcnv@ chars, chars, "Sw"
return chars
#global
// よく使う定数
; ヌルポインタ
#const NULL 0
; 真偽値
#const FALSE 0
#const TRUE 1
// GTK+初期化
gtk_init NULL, NULL
// ウィンドウ生成
#const GTK_WINDOW_TOPLEVEL 0 ; GtkWindowType
gtk_window_new GTK_WINDOW_TOPLEVEL
win = stat
gtk_container_set_border_width win, 10
g_signal_connect win, "delete-event", cb_win_delete_event, NULL
// Box生成
#const GTK_ORIENTATION_HORIZONTAL 0 ; GtkOrientation
gtk_box_new GTK_ORIENTATION_HORIZONTAL, 6
hbox = stat
// ボタン群生成
; ボタン1
gtk_button_new_with_label u( "クリック!" )
btn1 = stat
g_signal_connect btn1, "clicked", cb_btn1_clicked, 0
; ボタン1のラベルのフォントを設定
gtk_container_get_children btn1
g_list_nth_data stat, 0
lbl = stat
pango_font_description_from_string "ms ui gothic, italic 12"
gtk_widget_override_font lbl, stat
; ボタン2
#define GTK_STOCK_OPEN "gtk-open" ; GtkStockItem
gtk_button_new_from_stock GTK_STOCK_OPEN
btn2 = stat
g_signal_connect btn2, "clicked", cb_btn2_clicked, 0
; ボタン3
gtk_button_new_with_mnemonic "_Close"
btn3 = stat
g_signal_connect btn3, "clicked", cb_btn3_clicked, 0
// ウィンドウの組み立て
gtk_box_pack_start hbox, btn1, TRUE, TRUE, 0
gtk_box_pack_start hbox, btn2, TRUE, TRUE, 0
gtk_box_pack_start hbox, btn3, TRUE, TRUE, 0
gtk_container_add win, hbox
// ウィンドウの表示とメインループの開始
gtk_widget_show_all win
gtk_main
end
/* シグナルハンドラ */
*on_win_delete_event
gtk_main_quit
return
*on_btn1_clicked
mes "\"クリック!\" ボタンがクリックされました。"
return
*on_btn2_clicked
mes "\"Open\" ボタンがクリックされました。"
return
*on_btn3_clicked
dialog "\"Close\" ボタンがクリックされました。"
gtk_main_quit
return
次のページから、各部分について説明します。今までの章で既出の事項は省略します。