/* ******************************************************************************** ** ** GetDlgData.c ** ** Copyright 2007 CTC ITOCHU Techno-Solutions Corporation All rights reserved. ** ******************************************************************************** */ /* ====================================================================== 注)UIStylerにてダイアログが作成されていることを前提とします。 UIStylerで作成するダイアログ項目は、 ・整数 ・ストリング ※ UIStylerの作成については NX4 のオンライン・ドキュメントの 「Tool」→「Openユーザインタフェーススタイラ」 を参照願います。 ====================================================================== */ /* ============================================================ */ /* インクルード・ファイル */ #include #include #include #include /* ============================================================ */ /* マクロ */ /* UIStylerで作成したダイアログの項目識別子 */ /* ※ UIStylerでダイアログを作成するときにできるテンプレートに記述されています。 */ #define CHANGE_LABEL_0 ("LABEL_0") #define CHANGE_LABEL_2 ("LABEL_2") #define CHANGE_LABEL_1 ("LABEL_1") #define CHANGE_INT_0 ("INT_0") #define CHANGE_INT_1 ("INT_1") #define CHANGE_STR_2 ("STR_2") #define CHANGE_STR_3 ("STR_3") #define CHANGE_DIALOG_OBJECT_COUNT ( 7 ) /* UIStylerで作成したダイアログのコールバック関数の数 */ /* ※ UIStylerでダイアログを作成するときにできるテンプレートに記述されています。 */ #define CHANGE_CB_COUNT ( 2 + 1 ) /* ============================================================ */ /* 関数宣言 */ /* ---------------+-----------------------+------------------------ */ /* 型 | 関数名 | 引数 */ /* ---------------+-----------------------+------------------------ */ /* ダイアログデータ取得関数 */ static void fctTest (); /* ============================================================ */ /* 関数宣言 */ /* UIStylerで作成したダイアログのコールバック関数 */ /* ※ UIStylerでダイアログを作成するときにできるテンプレートに記述されています。 */ /* ---------------+-----------------------+------------------------ */ /* 型 | 関数名 | 引数 */ /* ---------------+-----------------------+------------------------ */ /* OKボタン押下 */ int CHANGE_ok_cb (int dialog_id, void * client_data, UF_STYLER_item_value_type_p_t callback_data); /* 適用ボタン押下 */ int CHANGE_apply_cb (int dialog_id, void * client_data, UF_STYLER_item_value_type_p_t callback_data); /* ============================================================ */ /* 構造体宣言 */ /* UIStylerで作成したダイアログのコールバック関数の構造体 */ /* ※ UIStylerでダイアログを作成するときにできるテンプレートに記述されています。 */ /* -------------------------------+-------+------------------------ */ /* 型 | 関数名 | 引数 */ /* -------------------------------+-------+------------------------ */ static UF_STYLER_callback_info_t CHANGE_cbs[CHANGE_CB_COUNT] = { { UF_STYLER_DIALOG_INDEX , UF_STYLER_OK_CB , 0 , CHANGE_ok_cb }, { UF_STYLER_DIALOG_INDEX , UF_STYLER_APPLY_CB , 0 , CHANGE_apply_cb }, { UF_STYLER_NULL_OBJECT , UF_STYLER_NO_CB , 0 , 0 } }; /* ============================================================ */ /* ユーザイグジット */ /* NX のメニュー「ファイル」→「UG/openの実行」→「ユーザファンクション」で */ /* 呼び出される。 */ extern DllExport void ufusr( char *parm, int *returnCode, int rlen ) { /* ---------------------------------------- */ /* Open/APIイニシャライズ */ int errorCode = UF_initialize(); if ( 0 == errorCode ) { /* TODO: Add your application code here */ /* ---------------------------------------- */ /* ダイアログデータ取得関数 */ fctTest(); /* ---------------------------------------- */ /* Open/API終了 */ errorCode = UF_terminate(); } } /* ============================================================ */ /* プログラム・アンロード */ extern int ufusr_ask_unload (void) { /* unload immediately after application exits */ return ( UF_UNLOAD_IMMEDIATELY ); } /* ============================================================ */ /* ダイアログデータ取得関数 */ static void fctTest() { int intResp = 0; /* ダイアログの終了時の応答 */ /* ---------------------------------------- */ /* 指定したUIStylerダイアログを表示します。 */ UF_STYLER_create_dialog( "c:temp\GetDlgData.dlg", /* UIStylerダイアログファイル名 */ CHANGE_cbs, /* UIStylerダイアログファイルコールバックリスト */ CHANGE_CB_COUNT, /* コールバックリスト数 */ NULL, /* コールバックを通して渡されたダイアログ */ /* クライアントデータ */ &intResp); /* ダイアログの終了時の応答値 */ /* UF_UI_OK */ /* UF_UI_CANCEL */ /* UF_UI_BACK */ /* UF_UI_PICK_RESPONSE */ /* UF_UI_CB_TERMINATE */ return; } /* ============================================================ */ /* OKボタン押下コールバック */ /* ダイアログの「OK」ボタン押下で NX より呼出される。 */ int CHANGE_ok_cb(int dialog_id, void * client_data, UF_STYLER_item_value_type_p_t callback_data) { UF_STYLER_item_value_type_t srcGetValue; /* ダイアログ項目の構造体(取得用) */ UF_STYLER_item_value_type_t srcSetValue; /* ダイアログ項目の構造体(設定用) */ int intData = 0; /* integer用データ記憶 */ char chrData[256] = ""; /* char用データ記憶 */ /* ---------------------------------------- */ /* 単一のダイアログ項目のデータを取得します。 */ /* ---------------------------------------- */ /* ---------------------------------------- */ /* 整数データの取得 */ /* ---------------------------------------- */ /* 取得するダイアログ項目を設定します。 */ srcGetValue.item_id = CHANGE_INT_0; /* ダイアログ項目(整数) */ srcGetValue.item_attr = UF_STYLER_VALUE; /* 属性(値) */ /* ---------------------------------------- */ /* データを取得します。 */ /* ※ この関数はダイアログのコールバック関数からしか実行できません。 */ UF_STYLER_ask_value( dialog_id, /* ダイアログの識別子 */ /* コールバック関数の引数を指定 */ &srcGetValue); /* */ /* i: ダイアログ項目名、取得する属性を指定 */ /* o: iで指定したダイアログ項目の値を出力 */ /* ---------------------------------------- */ /* 取得データのコピーをします。 */ intData = srcGetValue.value.integer; /* ---------------------------------------- */ /* メモリの開放をします。 */ UF_STYLER_free_value(&srcGetValue); /* ---------------------------------------- */ /* 整数データの設定 */ /* ---------------------------------------- */ /* 設定するダイアログ項目を設定します。 */ srcSetValue.item_id = CHANGE_INT_1; /* ダイアログ項目(整数) */ srcSetValue.item_attr = UF_STYLER_VALUE; /* 属性(値) */ srcSetValue.value.integer = intData; /* 設定データ */ /* ---------------------------------------- */ /* データを設定します。 */ /* ※ この関数はダイアログのコールバック関数からしか実行できません。 */ UF_STYLER_set_value( dialog_id, /* ダイアログの識別子 */ &srcSetValue); /* ダイアログ項目名、取得する属性を指定*/ /* ---------------------------------------- */ /* メモリの開放をします。 */ UF_STYLER_free_value(&srcSetValue); /* ---------------------------------------- */ /* ストリングデータの取得 */ /* ---------------------------------------- */ /* 取得するダイアログ項目を設定します。 */ srcGetValue.item_id = CHANGE_STR_2; /* ダイアログ項目(ストリング) */ srcGetValue.item_attr = UF_STYLER_VALUE; /* 属性(値) */ /* ---------------------------------------- */ /* データを取得します。 */ /* ※ この関数はダイアログのコールバック関数からしか実行できません。 */ UF_STYLER_ask_value( dialog_id, /* ダイアログの識別子 */ /* コールバック関数の引数を指定 */ &srcGetValue); /* */ /* i: ダイアログ項目名、取得する属性を指定 */ /* o: iで指定したダイアログ項目の値を出力 */ /* ---------------------------------------- */ /* 取得データのコピーをします。 */ strcpy(chrData, srcGetValue.value.string); /* ---------------------------------------- */ /* メモリの開放をします。 */ UF_STYLER_free_value(&srcGetValue); /* ---------------------------------------- */ /* ストリングデータの設定 */ /* ---------------------------------------- */ /* 設定するダイアログ項目を設定します。 */ srcSetValue.item_id = CHANGE_STR_3; /* ダイアログ項目(整数) */ srcSetValue.item_attr = UF_STYLER_VALUE; /* 属性(値) */ srcSetValue.value.string = chrData; /* 設定データ */ /* ---------------------------------------- */ /* データを設定します。 */ /* ※ この関数はダイアログのコールバック関数からしか実行できません。 */ UF_STYLER_set_value( dialog_id, &srcSetValue); /* ---------------------------------------- */ /* メモリの開放をします。 */ UF_STYLER_free_value(&srcSetValue); /* ---------------------------------------- */ /* ダイアログを閉じません。 */ /* (サンプルのためダイアログを閉じないようにします。) */ return (UF_UI_CB_CONTINUE_DIALOG); // /* 通常はダイアログを閉じます。 */ // return (UF_UI_CB_EXIT_DIALOG); } /* ============================================================ */ /* 適用ボタン押下コールバック */ /* ダイアログの「適用」ボタン押下で NX より呼出される。 */ int CHANGE_apply_cb(int dialog_id, void * client_data, UF_STYLER_item_value_type_p_t callback_data) { UF_STYLER_item_value_type_t srcGetValues[2]; /* ダイアログ項目の構造体(取得用) */ UF_STYLER_item_value_type_t srcSetValue; /* ダイアログ項目の構造体(設定用) */ int intValueNum = 0; /* データ数(入力) */ int intCount = 0; /* データ数(出力) */ int intData = 0; /* integer用データ記憶 */ char chrData[256] = ""; /* char用データ記憶 */ int intI = 0; /* ---------------------------------------- */ /* 複数のダイアログ項目のデータを取得します。 */ /* ---------------------------------------- */ /* ---------------------------------------- */ /* 取得するダイアログ項目を設定します。 */ intValueNum = 2; /* 取得するデータ数 */ srcGetValues[0].item_id = CHANGE_INT_0; /* ダイアログ項目(整数) */ srcGetValues[0].item_attr = UF_STYLER_VALUE; /* 属性(値) */ srcGetValues[1].item_id = CHANGE_STR_2; /* ダイアログ項目(ストリング) */ srcGetValues[1].item_attr = UF_STYLER_VALUE; /* 属性(値) */ /* ---------------------------------------- */ /* ダイアログ項目のデータを取得します。 */ /* ※ この関数はダイアログのコールバック関数からしか実行できません。 */ UF_STYLER_ask_values( dialog_id, /* ダイアログの識別子 */ intValueNum, /* 取得するダイアログ項目の数 */ srcGetValues, /* 取得するダイアログ項目の設定 */ &intCount); /* 取得されたデータの数 */ /* ---------------------------------------- */ /* 取得データのコピーをします。 */ intData = srcGetValues[0].value.integer; /* 整数 */ strcpy(chrData, srcGetValues[1].value.string); /* 文字列 */ /* ---------------------------------------- */ /* メモリを開放します。 */ for (intI = 0; intI < intCount; intI++) { UF_STYLER_free_value (&srcGetValues[intI]); } /* ---------------------------------------- */ /* 設定は複数同時にできないので単一で設定します。 */ /* ---------------------------------------- */ /* 整数データの設定 */ /* ---------------------------------------- */ /* 設定するダイアログ項目を設定します。 */ srcSetValue.item_id = CHANGE_INT_1; /* ダイアログ項目(整数) */ srcSetValue.item_attr = UF_STYLER_VALUE; /* 属性(値) */ srcSetValue.value.integer = intData; /* 設定データ */ /* ---------------------------------------- */ /* データを設定します。 */ /* ※ この関数はダイアログのコールバック関数からしか実行できません。 */ UF_STYLER_set_value( dialog_id, /* ダイアログの識別子 */ &srcSetValue); /* ダイアログ項目名、取得する属性を指定*/ /* ---------------------------------------- */ /* メモリの開放をします。 */ UF_STYLER_free_value(&srcSetValue); /* ---------------------------------------- */ /* ストリングデータの設定 */ /* ---------------------------------------- */ /* 設定するダイアログ項目を設定します。 */ srcSetValue.item_id = CHANGE_STR_3; /* ダイアログ項目(ストリング) */ srcSetValue.item_attr = UF_STYLER_VALUE; /* 属性(値) */ srcSetValue.value.string = chrData; /* 設定データ */ /* ---------------------------------------- */ /* データを設定します。 */ /* ※ この関数はダイアログのコールバック関数からしか実行できません。 */ UF_STYLER_set_value( dialog_id, /* ダイアログの識別子 */ &srcSetValue); /* ダイアログ項目名、取得する属性を指定*/ /* ---------------------------------------- */ /* メモリの開放をします。 */ UF_STYLER_free_value(&srcSetValue); /* ダイアログは閉じません。 */ return (UF_UI_CB_CONTINUE_DIALOG); }