10.2.1 サンプルプログラムの全体
// コールバック関数を使うための準備
#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_dlg2_delete_event, 3, *on_dlg2_delete_event, CLBKMODE_CDECL@
newclbk3 cb_btn_close_clicked, 2, *on_btn_close_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_main "gtk_main"
#func global gtk_main_quit "gtk_main_quit"
#func global gtk_vbox_new "gtk_vbox_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_window_set_title "gtk_window_set_title" sptr, sptr
#func global gtk_dialog_run "gtk_dialog_run" sptr
#func global gtk_widget_hide "gtk_widget_hide" sptr
#func global gtk_message_dialog_new0 "gtk_message_dialog_new" sptr, int, int, int, str
#func global gtk_message_dialog_format_secondary_text0 "gtk_message_dialog_format_secondary_text" sptr, str
#func global gtk_dialog_get_widget_for_response "gtk_dialog_get_widget_for_response" sptr, int
#uselib "libgobject-2.0-0.dll"
#func global g_signal_connect_data "g_signal_connect_data" sptr, str, sptr, sptr, int, int
#define g_signal_connect(%1, %2, %3, %4) g_signal_connect_data %1, %2, %3, %4, 0, 0
// よく使う関数
#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
// HBox生成
gtk_vbox_new FALSE, 3
vbox = stat
// ボタン群生成
; ボタン1
gtk_button_new_with_label "MessageDialog (modal)"
btn1 = stat
g_signal_connect btn1, "clicked", cb_btn1_clicked, 0
; ボタン2
gtk_button_new_with_label "MessageDialog (non-modal)"
btn2 = stat
g_signal_connect btn2, "clicked", cb_btn2_clicked, 0
// ウィンドウの組み立て
gtk_box_pack_start vbox, btn1, TRUE, TRUE, 0
gtk_box_pack_start vbox, btn2, TRUE, TRUE, 0
gtk_container_add win, vbox
// ウィンドウの表示とメインループの開始
gtk_widget_show_all win
gtk_main
end
/* シグナルハンドラ */
*on_win_delete_event
gtk_main_quit
return
#const GTK_MESSAGE_INFO 0 ; GtkMessageType
#const GTK_BUTTONS_OK 1 ; GtkButtonsType
*on_btn1_clicked
if dlg1 = NULL {
msg = u( "これは、モーダルなINFO MessageDialogのメインテキストです。" )
gtk_message_dialog_new0 win, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, msg
dlg1 = stat
gtk_window_set_title dlg1, "Modal MessageDialog"
gtk_message_dialog_format_secondary_text0 dlg1, u( "これはサブテキストです。" )
}
gtk_dialog_run dlg1
response = stat
mes "response id: " + response
gtk_widget_hide dlg1
return
#const GTK_MESSAGE_WARNING 1 ; GtkMessageType
#const GTK_BUTTONS_CLOSE 2 ; GtkButtonsType
#const GTK_RESPONSE_CLOSE -7 ; GtkResponseType
*on_btn2_clicked
if dlg2 = NULL {
msg = u( "これは、ノンモーダルなWARNING MessageDialogのメインテキストです。" )
gtk_message_dialog_new0 win, 0, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, msg
dlg2 = stat
gtk_window_set_title dlg2, "Non-modal MessageDialog"
gtk_message_dialog_format_secondary_text0 dlg2, u( "これはサブテキストです。" )
g_signal_connect dlg2, "delete-event", cb_dlg2_delete_event, NULL
gtk_dialog_get_widget_for_response dlg2, GTK_RESPONSE_CLOSE
btn_close = stat
g_signal_connect btn_close, "clicked", cb_btn_close_clicked, NULL
}
gtk_widget_show_all dlg2
return
*on_dlg2_delete_event
gtk_widget_hide dlg2
return TRUE
*on_btn_close_clicked
gtk_widget_hide dlg2
return
Prev - Table of contents - Next