10.1.1 サンプルプログラムの全体


// コールバック関数を使うための準備
#include "modclbk.as"
    newclbk3 cb_win_delete_event, 3, *on_win_delete_event, CLBKMODE_CDECL@
    newclbk3 cb_btn_clicked, 2, *on_btn_clicked, CLBKMODE_CDECL@

// GTK+の関数を使うための準備
#uselib "libgtk-3-0.dll"
#func global gtk_init "gtk_init" sptr, sptr
#func global gtk_settings_get_default "gtk_settings_get_default"
#func global gtk_settings_set_string_property "gtk_settings_set_string_property" sptr, sptr, sptr, sptr
#func global gtk_window_new "gtk_window_new" 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_widget_show "gtk_widget_show" sptr
#func global gtk_main "gtk_main"
#func global gtk_main_quit "gtk_main_quit"
#func global gtk_button_new_with_label "gtk_button_new_with_label" sptr
#func global gtk_label_new "gtk_label_new" sptr
#func global gtk_box_pack_start "gtk_box_pack_start" sptr, sptr, int, int, int
#func global gtk_dialog_new "gtk_dialog_new"
#func global gtk_dialog_get_content_area "gtk_dialog_get_content_area" sptr
#func global gtk_dialog_add_button "gtk_dialog_add_button" sptr, sptr, int
#func global gtk_dialog_run "gtk_dialog_run" sptr
#func global gtk_widget_destroy "gtk_widget_destroy" 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

// よく使う関数
#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

    // GTK+のデフォルトGUIフォントを変更
    gtk_settings_get_default
    gtk_settings_set_string_property stat, "gtk-font-name", "ms ui gothic, 10", NULL

    // ウィンドウ生成
#const GTK_WINDOW_TOPLEVEL 0 ; GtkWindowType
    gtk_window_new GTK_WINDOW_TOPLEVEL
    win = stat
    g_signal_connect win, "delete-event", cb_win_delete_event, NULL

    // ボタン生成
    gtk_button_new_with_label "Open Dialog"
    btn = stat
    g_signal_connect btn, "clicked", cb_btn_clicked, 0

    // ウィンドウの組み立て
    gtk_container_add win, btn

    // ウィンドウの表示とメインループの開始
    gtk_widget_show_all win
    gtk_main
    end

/* シグナルハンドラ */
*on_win_delete_event
    gtk_main_quit
    return

*on_btn_clicked
    // ダイアログ生成
    gtk_dialog_new
    dlg = stat

    // content area用のラベルを生成
    gtk_label_new u("これはダイアログのcontent areaに追加されたラベルです。")
    lbl = stat
    gtk_widget_show lbl
    gtk_label_new u("これは2つ目のラベルです。")
    lbl2 = stat
    gtk_widget_show lbl2

    // content areaにラベルを追加
    gtk_dialog_get_content_area dlg
    carea = stat
    gtk_box_pack_start carea, lbl, FALSE, FALSE, 10
    gtk_box_pack_start carea, lbl2, FALSE, FALSE, 10

#define GTK_STOCK_CANCEL "gtk-cancel" ; GtkStockItem
#define GTK_STOCK_OK "gtk-ok"
#const GTK_RESPONSE_DELETE_EVENT -4  ; GtkResponseType
#const GTK_RESPONSE_OK -5
#const GTK_RESPONSE_CANCEL -6
    // action areaにボタンを追加
    gtk_dialog_add_button dlg, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL
    gtk_dialog_add_button dlg, GTK_STOCK_OK, GTK_RESPONSE_OK

    // ダイアログを表示して、ダイアログ用のイベントループに入る
    gtk_dialog_run dlg
    switch stat
    case GTK_RESPONSE_OK
        mes "ダイアログのOKボタンが押されました。"
        swbreak
    case GTK_RESPONSE_CANCEL
        mes "ダイアログのCancelボタンが押されました。"
        swbreak
    case GTK_RESPONSE_DELETE_EVENT
        mes "ダイアログのクローズボタンが押されました。"
        swbreak
    swend

    // ダイアログを破棄
    gtk_widget_destroy dlg
    return

Prev - Table of contents - Next