Smart CODE
生成済みコードに関するオンラインガイド

getter と setter を使用する。既製の例題を使った学習


概要

この例題は、自分でツールキット依存型のコードを記述しなくても、インタフェースコントロールをかなり効果的にプログラムできることを示しています。独自に記述したコールバックが、X または Motif を使用している場合と同様に、MFC を実行している Windows PC 上でも快適に動作します。 

例題を実行する前に必要な作業と知識

環境変数、ほか

通常どおり、パスには必ず $XDROOT/bin を指定します。

例題を使用した作業を始める前に設定が必要な変数は以下のものです。

XDROOT
LM_LICENSE_FILE

例題を準備する

手順 1 新しいディレクトリを作成し、ここでは仮に getters という名前を付けます。
手順 2 getters ディレクトリに移動します。
手順 3 xdreplay スクリプトの $XDROOT/src/examples/sc/getset.vcr を使用して、xdesigner を実行します。次のように指定します。
$ xdreplay -f $XDROOT/src/examples/sc/getset.vcr xdesigner

これを実行すると、アプリケーション例題が作成され、コードが生成され、ユーザーが記述しておいたコールバックの標準バージョンが適切な箇所にコピーされて、プログラムを構築するための呼び出しが行われます。 

例題を実行する

まず、環境変数が設定されていることを確認します。問題がある場合は、正しく設定されているかチェックします。
$ ls $XDROOT

次のように入力してアプリケーション例題を実行します。
$ ./untitled

この例題 (次のコードを参照) では、常にトグルとオプションメニューの値の同期が取れているようにし、テキストフィールドを使用して何らかの更新を行う必要があるかどうかをレポートしています。

例題の説明

インタフェースを作成する

このアプリケーションは、コールバックをアプリケーションからサーバーやその他の適切な場所に簡単に移動できることを説明するために設計されています。インタフェースは、コールバックに関連付けられたボタンが 1 つと、トグルとテキストフィールド各 1 つで構成されたグループを持つ基本的なものです。
手順 1 アプリケーションシェルとフォームを作成し、その下にボタン、トグル、オプションメニューおよびテキストフィールドを 1 つずつ作成します。
手順 2 オプションメニューに 2 つのボタンを設定し、一方のボタンには NO のラベル、もう一方 のボタンには YES のラベルを付けます。 
手順 3 トグルに PRESSME のラベルを付けます。 
手順 4 トグルをクリックし、次にテキストフィールドとオプションメニューを Shift キーを押しながらクリックして、それらをすべて選択します。 
手順 5 ツールバーから、「新規グループに追加」ボタンを選択します。グループエディタが表示されたら、それを閉じます。これが表示されるのは、必要に応じてグループ名を変更するだけのためです。 
手順 6 ボタンを選択して、「コールバック」ダイアログを開き、コールバックに doit_callback という名前を付けます。「スマートコード」のチェックボックスをオンにして、「スタイル」オプションメニューから「取得/選択」を選択します。次に「グループ」ボタンを押し、グループエディタでそのグループが選択されていることを確認してから、「適用」ボタンを押します。 
手順 7 メニューバーの「生成」メニューから「生成」を選択し、「コード生成」ダイアログを開きます。言語に C を選択していること、ディレクトリの指定が正しいこと、およびスタブを生成するためのトグルがオンになっていることを確認します。

 「生成」ボタンを押します。 

手順 8 シェルに戻り、make を使用してアプリケーションを構築します。 
この時点では、このアプリケーションはまったく動作しません。これは、スタブファイルにコードが記述されていないためです。次に、応答スクリプトに使用されるコード例を示します。
void
doit_callback_user (sc_data_t * d, mygroup_t* group, void* client_data)
{
        int option_ix  = SC_GET(SelectionByIndex,group->optionMenu1);
        int toggle_val = SC_GET(State,group->toggle1);

        if (option_ix != toggle_val) {
                SC_SET(Value,group->text1, "Changing Settings...");
                SC_SET(SelectionByIndex,group->optionMenu1,toggle_val);
        } else
                SC_SET(Value,group->text1, "Settings ok");

}

この例は強制ですが、トグルがオプションメニューと同期を取るようにして、テキストフィールドで行われていることを通知します。 

注意