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


// コールバック関数を使うための準備
#include "modclbk.as"
    newclbk3 cb_win_delete_event, 3, *on_win_delete_event, CLBKMODE_CDECL@
    newclbk3 cb_btn_activate_link, 2, *on_btn_activate_link, 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_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_link_button_new_with_label "gtk_link_button_new_with_label" str, str
#func global gtk_link_button_get_uri "gtk_link_button_get_uri" sptr
#func global gtk_container_add "gtk_container_add" 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

// よく使う定数
; ヌルポインタ
#const NULL 0
; 真偽値
#const TRUE 1

    // GTK+初期化
    gtk_init NULL, 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_link_button_new_with_label "http://www.gtk.org", "GTK+ Homepage"
    btn = stat
    g_signal_connect btn, "activate-link", cb_btn_activate_link, NULL

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

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

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

*on_btn_activate_link
    clbkargprotect args_
    widget = args_( 0 )

    gtk_link_button_get_uri widget
    ptr = stat
    dupptr uri, ptr, 1024, 2
    exec uri, 16
    return TRUE

Prev - Table of contents - Next