『Cプログラミング診断室』目次次(第13章 計算は自分で 楽したい)

第13章 計算は自分で

ウィンドウ設計


XViewでのウィンドは、図13−1のような形に表示されます。これは、XView(OpenWindows)の 標準ツールの1つです。ネットワークで繋がっているコンピュータの状態をモニターするもので、 このウィンドで何をモニターするかを指定します。指定後、適用ボタンをクリックすると、その内 容がグラフで表示され続けます。

今回紹介のソフトの画面コピーをと思ったのですが、特殊なハードウェアがないと動作しないた め、掲載した関数での表示はご容赦ください。図13−1は、XViewで作ったウィンドのイメージ を持っていただくためのものです。

◆図13−1 計算機の状態モニターの操作パネル

※本からスキャンしたから汚いね(^_^)

プログラミングに疲れたら、図13−2のゲームもいいでしょう。

◆図13−2 Spider(蜘蛛)

リスト13−1の102行から始まる関数rgb_info_initは、その名のとおり色情報を表示するウィ ンド(XViewではFRAMEという)を生成し、その中に色々な部品を並べます。ソフトにもよりますが、 ウィンドウの中に50個以上の部品を配置することもあります。このソフト、1つ1つのウィンドウ はそれほど複雑ではないのですが(でもプログラムは難解)、50種類ものウィンドウを操りながら 操作するんです。

■位置計算■

さて、この関数の最初に、代入文が多数並んでいますが、これはいったい何だと思いますか。ま あ、じっくりながめてください。x1,x2,..とかあるので、位置でも計算しているのだろうというこ とは分かるでしょう。

strlenは文字列長を求める関数なので、当然その引数は文字列ということになります。strlenの 引数は大文字の名前になっていますが、これは全てマクロ名で、

   #define   SYS_TEXT_RGB_INFO     "RGB情報"
というふうに定義されています。これらの長さを調べては配置する位置を決めています。

最初の要素の座標値(x1,y)はマクロで指定しています。

2番目、3番目のx座標の位置は、

        x2 = x1 + ........;
        x3 = x2 + ........;
となっています。さらに、
        x7 = x6 - ........;
        x8 = x7 - ........;
        x9 = x8 - ........;
        x10 = x9 - ........;
というのも複雑化するのに役立っています。

とにかくゴチャゴチャしていて、私の理解どころか、想像の範囲を越えた別世界の人が書いたと しか思えないコーディングです。110行から151行までのびっしりと力を込めて書かれた部分は、理 解などできる部分ではないでしょう。各要素を配置する座標値を求めている(らしい)ことだけを 理解してください。それでも内容を知りたい人は、じっくり腰をすえて解読してください。

ここで求めた位置は、関数xv_createで生成したオブジェクトの位置を決める属性として引数に 入れています。x1は175行目で、

        XV_X,x1
として指定しています。211行目からのxv_createは、チェックボックスといって、複数の箱とチェッ クマークを表示できるもの(チェックボックス)を生成しています。
    xv_create(rgb_info_panel1,PANEL_CHECK_BOX,
        PANEL_CHOICE_STRINGS,
                SYS_TEXT_PLANE0,
                SYS_TEXT_PLANE1,
                SYS_TEXT_PLANE2,
                SYS_TEXT_PLANE3,
                NULL,
        PANEL_CHOICE_XS,
                x3,x3+choice,x3+choice*2,x3+choice*3,NULL,
        PANEL_CHOICE_YS,
                y - SYS_PANEL_CHOICE,NULL,
        NULL);
属性名PANEL_CHOICE_STRINGSは、各チェックボックスの隣に表示する文字列を指定します。何個 でも自由に設定でき、終りをNULLで指定します。

x座標値は、属性名PANEL_CHOICE_XSの後ろに同数個のx座標値を並べます。y座標についても同様 ですが、ここでは1つしか指定していません。省略された場合、同じ値が必要回数だけ繰り返され るので、y座標は同じになり、水平に並びます。

チェックボックスは、ふつうは複数個並べるので、1つの属性名(最後に S がついたもの)に 対しては複数の属性値を持ちます。この場合も、終りを示すために、属性値の最後にNULLを入れま す。


Copyright1996 Hirofumi Fujiwara. No reproduction or republication without written permission
『Cプログラミング診断室』目次次(第13章 計算は自分で 楽したい)