この章の目次にもどる
前頁:3.1 ウィンドウマネージャにもどる
次頁:3.3 パーツマネージャにすすむ

3.2 メニューマネージャ

3.2.1 メニューマネージャの機能

3.2.1.1 概要

メニューマネージャは外殻の HMI 機能の 1 つとして位置付けられ、 標準メニュー、 および汎用メニューの表示 / 操作 / 登録 / 削除等の機能を提供している。 アプリケーションプログラムは、 このメニューマネージャを通して容易に標準メニューおよび汎用メニューを使用することができる。

本仕様書では、 メニューの標準的な形状に関して説明しているが、 表示形状の詳細はインプリメントに依存する。

3.2.1.2 標準メニュー

1 レベルのポップアップメニューを標準メニューとしているが、 特殊な場合として 1 レベルのポップアップメニューも存在する。

最初に表示されるメニューをメインメニューと呼び、 項目を選択することにより表示される 2 段目のメニューをサブメニューと呼ぶ。 サブメニューを開くための項目を親項目 ( 代表項目 ) と呼び、 サブメニューを開かずに最終的な指示を与える項目を子項目 ( 末端項目 ) と呼ぶ。

通常、 メインメニューの項目は親項目であるが、 子項目をメインメニューの項目とすることも可能である。

メニューは項目名を縦方向に並べた矩形であり。 パネルと同様の逆 L 字型に引かれた陰影を持っている。 項目名の文字はシステム標準の文字が使用され、 項目の位置にポインタが行くと項目名が反転表示される。

また、メニュー項目が多くあった場合に、 煩雑になるのを避け視認性を上げるために、 項目をグループ分けするための点線を項目間に挿むことができる。

キーマクロで起動するように設定されているメニューの子項目については、 その項目と同じ行に右詰めで、 設定されているマクロ文字があらわれる。

項目が多すぎて、画面に収まりきらない場合は、 左右に 2 分割されて表示される。

メニューの項目は大きく以下のように分類される。

状態項目

選択されたことにより、 一つの状態を設定するようなコマンドでは、 その項目の前にインジケータが付く。 状態が設定されている場合インジケータが ON 状態になる。

動作項目

選択されたことにより即何らかの動作を引き起こす一般の項目を動作項目と呼ぶ。

不能項目

ある時点で使用不可能な選択できない項目を不能項目と呼び、 その項目の文字は灰色化表示される。 また、対応するサブメニューの全ての項目が不能項目の場合、 その親項目も不能項目となり、 対応するサブメニューは表示されることはない。 灰色化表示とは、 使用できないことを明確に見分けることができるようにした「弱い」表示である。

また、親項目が不能項目の場合は、 選択できないため、 対応するサブメニューは表示されることはない。

強調項目

強調するために、下線が引かれた項目を強調項目と呼ぶ。 これは、文字属性を設定するメニューの設定項目において、 その属性の文字データが存在する場合と、 存在しない場合とがソフトウェアによって生成できる場合を表示上見分ける場合等に使用する。 この場合データが存在する項目を強調項目とする。

メニューはポインタの下に表示され、 最初にポインタの位置に表示される項目を起点項目と呼ぶ。 起点項目の表示方法として以下のいずれかを指定することができる。

表示する位置をポインタに揃えたため、 メニューがスクリーンの上、 下端にぶつかるような場合は、 スクリーンの端にメニューの端が揃うように移動して表示される。 従って、 この場合はポインタの位置は上記の指定した位置とは異なることになる。

サブメニューは反転状態にあるメインメニューの親項目の右横に、 出来る限り親項目と上端を揃えるようにして現れる。 このときメインメニューに対し左に 8 ドット程度オーバラップして現れる。

親項目の右横に、 上端を揃えたためスクリーンの下端にぶつかるような場合は、 スクリーンの下端に下端を揃えた形で現れる。

メインメニューまたはサブメニューがスクリーンの右端にぶつかるような場合は、 左にづらして表示される。 サブメニューが、スクリーンの右端にはみ出てしまう場合は、 サブメニューはメインメニューの右側ではなく、 左側に表示される。親項目が 1 つのみの場合は、 1 レベルのメニューとなり、 サブメニューがメインメニューのごとく直接表示される。 表示の位置は、メインメニューの場合と同様である。

メインメニュー、 サブメニューの項目の数は一画面に表示できる数を最大とする。 なお、画面に表示しきれない項目を、 スクロールや段組みによって表示するインプリメントも考えられる。 また、各項目の文字数はインプリメント依存であるが、 なるべく短いことが望ましい。

標準メニューの表示に関しての属性として以下の項目が定義されており、 個々のメニューに対して指定可能である。 また、表示属性を指定せずにデフォルトとすることも可能である。

なお、メニューが表示されている間は、 原則的にスクリーン上の他の全ての描画は停止することになる。

標準メニューの例
図 67 : 標準メニューの例

3.2.1.3 標準メニューの操作

メインメニューの表示

メニューボタンをプレスするか、 または[命令]キーを押した状態で PD をプレスすると、 メインメニューが表示され、 ポインタの位置の起点項目は反転表示される。

項目の反転

項目にポンイタを合わせることにより、 その項目が反転表示される。 ただし、不能項目や区切り線は反転しない。

サブメニューの表示

親項目内でプレスまたはクリックするか、 親項目内にある一定時間ポインタが滞在していると、 サブメニューが表示される。

サブメニューが表示され、 ポインタを親項目からサブメニューの子項目に移動するとき、 斜めにポインタを移動すると、 サブメニューを表示していない親項目上を通過することがある。 このとき、通過途中の親項目より別のサブメニューが現われないよう、 ある一定時間親項目の反転が保持され、サブメニューは表示され続ける。

サブメニューが表示されるまでの時間、 及び親項目の反転が保持される時間をディレイタイムとよび、 任意に設定することができる。

サブメニューの消去

サブメニューが表示されている親項目以外のメインメニューの項目をプレスまたはクリックするか、 そのような項目にポインタがディレイタイム以上留まると、 サブメニューは消去される。

また、 サブメニューが表示された時点のポインタ位置からサブメニューとは反対方向に、 親項目の領域内を 1 文字分水平移動するか、 もしくは親項目の領域外へ移動するとサブメニューは消える。

項目の選択

子項目をクリックすることで項目が選択され、 メニューは終了し消える。 サブメニューの不能項目や区切り線が選択された場合は、 メニュー動作は継続する。

ポインタがメニューを外れると、 子項目の反転表示はなくなる。 表示されているサブメニューは、 そのまま表示されメインメニューの親項目の反転表示もそのまま残る。 この状態でクリックすると、 メニューの表示が消えるだけで何も起らない。

メニューボタンをクリックするとメニューは消え、 何も起らない。

サブメニューのロック

反転した親項目上でクリックすると、 その時点で表示されているサブメニュー以外のサブメニューは表示できなくなる。 この状態をロック状態という。 つまりロック状態ではポインタを移動したり、 別の親項目上にポインタをもってきても、 サブメニューが消えたり、 新たなサブメニューが表示されたりはしない。

ロックされていない他の親項目上でクリックすることで、 ロック状態は切り換わり、新しいサブメニューがロックされる。

ロック状態はロックされている親項目か、 不能項目になっている親項目をクリックすることで解除される。

1 レベルのメニュー

1 レベルのメニューの場合は、直接 ( サブ ) メニューが表示され、 ポインタの位置の子項目は反転表示される。

ポインタが ( サブ ) メニューを外れると、 反転した子項目がなくなるが、表示は残る。 この状態でリリースすると何も起らない。

マクロキー

マクロ文字のついた子項目は[命令]キーとともに指定された文字キーをプレスすることで、 選択することができる。 この場合は、 メニューの表示は一切行なわれない。

3.2.1.4 標準メニューのデータ構造

メニューの表示属性

標準メニューは以下に示す表示属性を持ち、 この属性に従って表示が行なわれる。

typedef struct menudisp {
    UW      m_frame;    /* メインメニューの枠の幅/パターン */
    UW      s_frame;    /* サブメニューの枠の幅/パターン */
    UW      m_bgpat;    /* メインメニューの背景パターン */
    UW      s_bgpat;    /* サブメニューの背景パターン */
    UW      s_indpat;   /* インジケータのパターン */
    COLOR   m_chcol;    /* メインメニューの項目文字色 */
    COLOR   s_chcol;    /* サブメニューの項目文字色 */
    COLOR   s_keycol;   /* サブメニューのキーマクロ文字色 */
} MENUDISP;
m_frame / s_frame の内容は以下の通りである。
標準メニューのフレーム属性
図 68 : 標準メニューのフレーム属性

枠の幅は最大 8 ピクセルであり、 それ以上指定しても 8 ピクセル幅となる。

m_bgpat / s_bgpat は、 それぞれ背景パターンを "PAT_DATA" タイプとして登録してあるデータ番号で指定する。 0 はデフォルトを意味する。

s_indpatは、インジケータのパターンを "PAT_DATA" タイプとして登録してあるデータ番号で指定する。 0 はデフォルトを意味する。

m_chcol / s_chcol は、 メニュー項目の文字および区切線の色を指定するが、 メニュー項目毎に色の指定も可能となる。

COLORVAL で指定した値が < 0 の場合は、 デフォルト値とすることを意味する。

デフォルト値はメニューマネージャにより適当な値が規定されているが、 デフォルト値自体も変更可能である。 デフォルト値を変更した場合は、 変更以後に表示される全てのデフォルト属性を持つ標準メニューに反映される。

また、 以下の表示位置に関する指定を行なうことができる。 この指定は、 すべてのメニューに共通であり、 個々のメニューごとに指定することはできない。

起点位置指定:
M_FIXPOS
起点項目は、常にメインメニューの上から 2 番目の項目
M_LASTPOS
起点項目は、 最後に使用したメインメニューの項目
項目リストの構造

メニューは複数の項目リストの順番を持った集まりとして定義される。 1 つの項目リストは親項目と、 それに対応する複数の子項目から構成され、 1 つの文字列として以下の形で定義される。 項目の最大数は 128 個までであり、 先頭の項目が親項目となり、 続いて127 個の子項目が続く。 項目が 1 つのみの場合は親項目は存在せず、 その項目は子項目と見なされる ( 実際に登録できる項目数は画面の大きさに依存する ) 。

ここで、[..]は省略可能、| は選択 ( OR )、... は繰り返しを意味する。

<親項目指定>[<子項目指定>...]<TNULL>

<親項目指定> および <子項目指定> は、以下の形式となる。

<属性コード>[<文字属性指定>|<図形指定>][<マクロ文字>...]<項目文字列>

属性コード ( メタコード ) は、 区切り文字としての意味と、 続く項目の属性指定の意味を持つ。 また <TNULL> は文字列の終端としての 0 である。

属性コード
図 69 : 属性コード
MC_FIG :

0 -- 文字項目
1 -- 図形項目

MC_ATTR :

0 -- 標準属性の文字列 ( MC_FIG = 0 の時のみ有効 )
1 -- 指定属性の文字列 ( MC_FIG = 0 の時のみ有効 )

文字項目の場合は、メニュー項目は文字列であり、 MC_ATTR = 1 の場合は直後に 12 バイトの文字属性指定コード列が存在し、 その後に項目としての文字列がくる。 MC_ATTR = 0 の場合は文字属性指定コードは存在せず、 直後に項目としての文字列がくる。 文字列は属性コードまたは TNULL コード ( = 0 ) で終了し、 後者の場合は全体の終了を意味する。 文字列としては表示可能な任意の文字が許され、 それ以外のものは無視される。

文字属性指定コードは以下に示す 12 バイト固定のデータである。

        COLORVAL chcol  -- 文字色指定(-1は文字色指定無し)
        WORD    class   -- フォントクラス指定 (-1はデフォルトフォント)
        UWORD   attr    -- フォント属性指定(0は通常体)
        PNT     csize   -- フォントサイズ指定
                (csize.c.h または csize.c.v が≦0のときデフォルトサイズ)
                システム標準文字サイズより大きいサイズは指定できない。

MC_ATTR = 0は、 文字色指定無し、デフォルトフォント、通常体を意味する。 文字色指定無しの場合は、 メニューの表示属性として定義された文字色が適用される。

図形項目の場合は、メニュー項目は図形の矩形表示となり、 MC_ATTR は無視される。 この場合、直後に以下の2ワードの図形指定コードがくる。


        TTTT DDDD DDDD DDDD
        0000 0000 000L LLLL

        T:図形のデータタイプ ID
        0:ポインタイメージ      ("PTR_DATA" )
        1:ピクトグラムイメージ  ("PICT_DATA")
        2:パターンデータ        ("PAT_DATA" )
        3:ビットマップデータ    ("BMAP_DATA")
        4〜:予約
        D:図形のデータ番号 (0の場合、または存在しない
                            データの場合は何も表示されない)
        l:図形の横幅文字数 (1〜16)

        図形項目は、Lで指定した1〜16文字分の矩形領域に表示される。
MC_LINE :

0 -- 通常項目
1 -- 区切線 ( 全体の矩形の横幅一杯の点線が表示される )

区切線の色は、メニューの文字色の色と同じである。 MC_LINE = 1の場合は、 他のすべての属性は無視され、 常に選択不可となる。 親項目で MC_LINE = 1 の場合は、 親項目、子項目は実際には表示されず無視される。

MC_KEY :

指定されているキーマクロの個数を示す ( 0 はキーマクロ無し )。最大 15 個までのキーマクロが 1 つの項目に対して指定可能であり、 属性コードの直後に個数分のキーマクロ文字コードが続き、 その先頭の 1 文字が項目の後ろに表示される。 キーマクロ文字の色はメニューの表示属性として定義された色が適用される。

文字属性指定や図形指定の場合は、 文字属性指定コードや図形指定コードの次にキーマクロ文字コードがくる。

キーマクロ文字の言語はシステムスクリプトとして解釈される。

MC_IND :

0 -- 動作項目
1 -- 状態項目 (項目の前にインジケータが表示される。)

親項目の場合、MC_IND は無視される。 インジケータの色はメニューの表示属性として定義された色が適用される。

MC_SEL :

0 -- 非選択状態 (インジケータはOFF表示)
1 -- 選択状態 (インジーケータはON表示)

親項目の場合、または、MC_IND=0 の場合は無視される。

MC_EMPHAS :

0 -- 通常項目
1 -- 強調項目 (項目の表示に下線がつけられる)

MC_INACT :

0 -- 正常項目
1 -- 不能項目 (灰色化表示され一切選択することはできない。親項目の場合はその子項目は表示されない)

メニュー項目の例
図 70 : メニュー項目の例
メニュー項目の構造

1 つのメニュー項目 ( 親項目と、子項目の組 ) は以下の形で定義される。

typedef struct menuitem {
    UW  inact;      /* 不能項目フラグ */
    UW  select;     /* 選択フラグ */
    W   desc;       /* 内部ディスクリプタ */
    W   dnum;       /* 項目リストのデータ番号 */
    TC  *ptr;       /* 項目リストへのポインタ */
} MENUITEM;

不能項目フラグ ( inact ) は以下に示す形で各項目にビット対応する。 このフラグは、属性コードの MC_INACT と同じ効果を持つが、 属性コードを変更せずに一時的に不能項目とする場合に使用される。 このフラグが 1 の場合、または属性コードの MC_INACT が 1 の場合に不能項目と見なされる。 このフラグは項目番号 0 〜 31 に対応する項目にしか有効でないが、 mchg_atr() を使用することで項目番号 32 〜 127 に対応する項目を設定することができる。

不能項目 / 選択フラグ
図 71 : 不能項目 / 選択フラグ

選択フラグ ( select ) も不能項目フラグと同様に各項目にビット対応しており、 属性コードの MC_SEL と同様の効果を持つものである。 属性コードの MC_IND = 1 の場合で、 MC_SEL = 1、またはこのフラグが 1 の場合に、 インジケータが ON 表示となる。 このフラグも項目番号 0 〜 31 に対応する項目にしか有効でないが、 mchg_atr() を使用することで項目番号 32 〜 127 に対応する項目を設定することができる。

動的に不能項目、選択項目が変化する場合は、 通常、属性コードの MC_INACT, MC_SEL は設定せず、不能項目フラグ、選択フラグを使用する。

項目リストは、メモリ上のデータとして直接、 そのポインタで指定する場合と、データマネージャにより "TEXT_DATA" タイプのデータとして管理されているものを指定する場合の 2 つがある。

ポインタで指定する場合は、dnum = 0 とし、ptr に項目リストへのポインタを設定する。ptr = NULL の場合は、 メニューとしては何も表示されないが、 メニューの登録後に親項目を所定の位置に追加したい場合には、 その位置にあらかじめ、ptr = NULL のメニュー項目を定義しておく必要がある。

データマネージャ管理のデータの場合には、dnum に "TEXT_DATA" タイプのデータ番号 ( > 0 ) を設定する。この場合、ptr は無視される。

内部ディスクリプタ ( desc ) は、dnum で項目リストが指定されていた場合、 その共有メモリのアドレスを入れる内部領域であり、 定義 / 設定時には無視される。

メニュー全体の構造

メニュー全体は、メニュー項目の配列の形で定義される。

親項目の数が 1 の場合は、1 レベルのメニューとなり、 親項目は表示されないことになるが、 メニュー項目としてはやはり親項目がなくてはいけない。 ただし、この場合、親項目はその属性も含めて無視されるので、 空の文字列であってもよい ( 不能項目であってはならない )。

メニューでの子項目は、以下の選択番号で表わされる。

項目の選択番号
図 72 : 項目の選択番号

<親項目番号> はメニュー項目の定義順の番号で、先頭は 0 である。

<子項目番号> は 1 つの項目リスト内の項目順で、 先頭は 0 であるが、 先頭の親項目は選択されることがないので、 実際には 1 からとなる ( 区切りの横線も 1 つの項目として数えられる)。 子項目のみの項目リストの場合は、 子項目番号は常に 1 となる。 1 レベルのメニューの場合は、 親項目番号は常に 0 となり、子項目番号 ( 1 〜 ) のみとなる。

3.2.1.5 汎用メニュー

汎用メニューは、1 レベルのポップアップメニューであり、 標準メニューのサブメニューと似ているが、 項目の配置を 2 次元的に任意に指定可能である。

通常、汎用メニューはコントロールパーツのスイッチと組み合せて、 ポップアップセレクタを実現するために使用される。

なお、汎用メニューも標準メニューと同様に表示されている間は、 原則的にスクリーン上の他の全ての描画は停止することになる。

汎用メニューの例
図 73 : 汎用メニューの例

3.2.1.6 汎用メニューの操作

3.2.1.7 汎用メニューのデータ構造

汎用メニューは、 標準メニューのメニュー項目と良く似た以下の構造によリ定義される。 メニューの項目は最大 128 個までである。

typedef struct gmenu {
    UW      frame;      /* フレーム属性 */
    UW      bgpat;      /* 背景パターン */
    UW      indpat;     /* インジケータのパターン */
    COLOR   chcol;      /* 項目文字 / 区切枠の色 */
    RECT    area;       /* 全体の表示領域 */
    UW      inact;      /* 不能項目フラグ */
    UW      select;     /* 選択フラグ */
    W       desc;       /* 内部ディスクリプタ */
    W       dnum;       /* 項目リストのデータ番号 */
    TC      *ptr;       /* 項目リストへのポインタ */
    W       nitem;      /* 項目数 */
    RECT    r[32];      /* 項目の表示領域(nitem個:32より大きい場合もある) */
} GMENU;

frame の内容は以下の通りである。

汎用メニューのフレーム属性
図 74 : 汎用メニューのフレーム属性

bgpat, indpat は、 それぞれ背景パターンとインジケータのパターンを、 "PAT_DATA" タイプとして登録してあるデータ番号で指定したもので、 0 の場合は、デフォルト値を意味する。

chcol は、項目文字 / 区切枠の色を示し、< 0 の場合は、 それぞれデフォルト値を意味する。

area は、 ポップアップする全体の矩形領域を絶対座標で指定するものであるが、 実際は表示時に位置を指定するため大きさのみ意味を持つ。 従って、通常は左上の点を ( 0, 0 ) と指定する。

inact, select, desc, dnum, ptrは、 それぞれ標準メニューと同じ意味を持つ。 ただし、親項目は存在せず、不能項目フラグ、 選択フラグの親項目に対応するビット ( LSB ) は最初の ( 子 ) 項目に対応することになり、 項目リストの先頭は最初の ( 子 ) 項目となる。 メニューの項目は、1 〜 128 の番号で区別される。

汎用メニューの不能項目/選択フラグ
図 75 : 汎用メニューの不能項目 / 選択フラグ

nitem は項目数であり、最大 128 である。

r は、各項目が表示される矩形領域の nitem 個の配列であり、 全体の表示領域の左上を ( 0, 0 ) とした座標で定義される。

項目リストの内容は、 親項目が存在しない点を除いて、 基本的に標準メニューの場合と同一であるが、 属性コードの意味は以下の点が異なる。

汎用メニューの項目領域
図 76 : 汎用メニューの項目領域

3.2.2 データ / 定数の定義

□ メニューID

typedef W       MNID;

□ メニュー項目

#define MC_LINE     0x1004  /* 区切線 */
#define MC_KEY      0x10f0  /* キーマクロの個数マスク */
#define MC_IND      0x1100  /* インジケータ有無 */
#define MC_SEL      0x1200  /* インジケータ状態 */

#define MC_KEY1     0x1010  /* キーマクロ 1 個 */
#define MC_KEY2     0x1020  /* キーマクロ 2 個 */
    〜
#define MC_KEY14    0x10e0  /* キーマクロ 14 個 */
#define MC_KEY15    0x10f0  /* キーマクロ 15 個 */

□ 標準メニュー定義

typedef struct menuitem {
    UW  inact;      /* 不能項目フラグ */
    UW  select;     /* 選択フラグ */
    W   desc;       /* 内部ディスクリプタ */
    W   dnum;       /* 項目リストのデータ番号 */
    TC  *ptr;       /* 項目リストへのポインタ */
} MENUITEM;

□ 標準メニュー表示属性定義

typedef struct menudisp {
    UW      m_frame;        /* メインメニューの枠の幅/パターン */
    UW      s_frame;        /* サブメニューの枠の幅/パターン */
    UW      m_bgpat;        /* メインメニューの背景パターン */
    UW      s_bgpat;        /* サブメニューの背景パターン */
    UW      s_indpat;       /* インジケータのパターン */
    COLOR   m_chcol;        /* メインメニューの項目文字色 */
    COLOR   s_chcol;        /* サブメニューの項目文字色 */
    COLOR   s_keycol;       /* サブメニューのキーマクロ文字色 */
} MENUDISP;

□ 汎用メニュー定義

typedef struct gmenu {
    UW      frame;      /* フレーム属性 */
    UW      bgpat;      /* 背景パターン */
    UW      indpat;     /* インジケータのパターン */
    COLOR   chcol;      /* 項目文字/区切枠の色 */
    RECT    area;       /* 全体の表示領域 */
    UW      inact;      /* 不能項目フラグ */
    UW      select;     /* 選択フラグ */
    W       desc;       /* 内部ディスクリプタ */
    W       dnum;       /* 項目リストのデータ番号 */
    TC      *ptr;       /* 項目リストへのポインタ */
    W       nitem;      /* 項目数 */
    RECT    r[32];      /* 項目の表示領域(nitem個) */
} GMENU;

□ メニュー項目属性

#define M_STAT      0   /* 変更しない */
#define M_SEL       1   /* 選択状態とする */
#define M_NOSEL     4   /* 選択状態としない */
#define M_ACT       8   /* 不能項目としない */
#define M_INACT     2   /* 不能項目とする */

□ メニュー表示位置指定

#define M_LASTPOS   0x0000  /* 起点項目は最後に使用したメイン項目 */
#define M_FIXPOS    0x0002  /* 起点項目は2番目のメイン項目 */

3.2.3 メニューマネージャの関数

mcre_men
 
標準メニューの登録

【形式】

MNID    mcre_men(W nitem, MENUITEM *item, MENUDISP *attr)

【パラメータ】

W        nitem  親項目数
MENUITEM *item  メニュー項目配列
MENUDISP *attr  メニュー表示属性

【リターン値】

≧ 0    正常   (関数値は登録されたメニュー ID)
< 0    エラー (エラーコード)

【解説】

nitem で指定した親項目数を持つ標準メニューを登録する。 itemnitem 個の要素数を持つメニュー項目配列へのポインタである。即ち、

    item[n]     n 番目のメニュー項目 (n=0〜nitem-1)

nitem = 1 の場合は、1 レベルのメニューとなり item[0] で指定されるメニュー項目の親項目は実際には表示されない。 nitem が画面に表示できる最大項目数を越える場合は、 この最大項目数が nitem として登録される。

attr はメニューの表示属性を指定するもので、 attr = NULL の場合は、 デフォルト属性を意味する。 表示属性で指定されたパターンデータ番号が不正な場合は、 デフォルトパターンで登録される。

登録後も、item で指定した メニュー項目内の ptr で示された項目リストは参照されるため、 保存しておかなければいけない。 なお、項目リストの内容を直接変更した場合は、 必ず mset_itm() により再設定しない限り表示は保証されない。

nitem と同様に項目リストの子項目数が画面に表示できる最大項目数を越える場合は、 この最大項目数までが参照される。 項目の最大文字数はインプリメントに依存し、 長すぎる場合は途中までが参照される。

この関数ではメニューの登録のみを行ない、 メニューの実際の表示は msel_men() により行なわれる。

関数値としてメニュー ID ( > 0 ) が戻され、 以後そのメニューの操作の際に使用する。 メニュー ID はプロセス依存であるため登録したプロセスでのみ有効であり、 メニュー ID を他のプロセスに渡してメニューの操作を行なうことはできない。

【エラーコード】

EX_ADR      : アドレス(item,attr)のアクセスは許されていない。
EX_NOSPC    : システムのメモリ領域が不足した。
EX_PAR      : パラメータが不正である(nitem,メニュー項目が不正)。

メモリ領域が不足して登録できない場合、通常は核エラーコードが返される。

mopn_men
 
標準メニューのデータボックスからの登録

【形式】

MNID    mopn_men(W dnum)

【パラメータ】

W   dnum    MENU_DATA タイプのデータ番号

【リターン値】

≧ 0    正常(関数値は登録されたメニューID)
< 0    エラー(エラーコード)

【解説】

dnum で指定したデータ番号を持つ、 "MENU_DATA" タイプのデータボックス定義データにより標準メニューを登録する。

この関数は、 メニューの定義データがデータボックスとして定義されている点を除いて、 その動作は、mcre_men() と全く同一である。

【エラーコード】

EX_DNUM     : データ(dnum等)はデータマネージャに登録されていない。
EX_NOSPC    : システムのメモリ領域が不足した。
EX_PAR      : パラメータが不正である(nitem,メニュー項目が不正)。

メモリが不足して登録できない場合、通常は核エラーコードが返される。

mdel_men
 
標準メニューの削除

【形式】

ERR mdel_men(W mid)

【パラメータ】

W   mid メニューID

【リターン値】

≧ 0    正常
< 0    エラー(エラーコード)

【解説】

mid で指定した登録済み標準メニューを削除する。

登録したプロセスが終了した場合、メニューは自動的に削除されるが、 基本的に不要になった時点で明示的に削除することが望ましい。

【エラーコード】

EX_MID      : メニュー(mid) は存在していない
              (標準メニューでない場合も含む)。
msel_men
 
標準メニューの選択動作

【形式】

W   msel_men(W mid, PNT pos)

【パラメータ】

W      mid    メニューID
PNT    pos    画面上の絶対座標位置

【リターン値】

≧ 0    正常(関数値は選択された項目の選択番号(選択されなかった場合は0))
< 0    エラー(エラーコード)

【解説】

mid で指定した登録済み標準メニューを pos で指定したスクリーン上の絶対座標位置に表示し、 PD の移動に従った選択動作を行ない、 PD のクリックにより表示を消して選択された項目の選択番号を関数値として戻す。 何も選択されなかった場合は、関数値は 0 となる。

posは、 メニューイベントが発生した位置を絶対座標を指定する。

メニュー動作にに発生した EV_BUTDWN, EV_BUTUP, EV_KEYDWN, EV_KEYUP, EV_AUTKEY は、 イベントキューから取り除かれて捨てられる。 それ以外のイベントはイベントキューに残される。

なお、この関数内ではポインタ形状変更は行なわないため、 通常、実行前に「選択指」のポインタ形状にしておく必要がある。

イメージ退避領域確保できない場合は、 メニュー動作終了後すべてのウィンドウに再表示要求が送られる。

【エラーコード】

EX_MID      : メニュー(mid)は存在していない
              (標準メニューでない場合も含む)。
mfnd_key
 
キーマクロの検索

【形式】

W   mfnd_key(W mid, TC ch)

【パラメータ】

W   mid メニューID
TC  ch  文字コード

【リターン値】

≧ 0    正常   (関数値はキーマクロ項目の選択番号
                 (定義されていなかった場合は0))
< 0    エラー (エラーコード)

【解説】

mid で指定した標準メニュー内に、 ch で指定した文字がキーマクロとして定義されているか否かを調べ、 定義されていた場合は、 関数値として対応する項目の選択番号を戻し、 定義されていなかった場合は関数値として 0 を戻す。

この関数は、通常 [命令] キーと同時にキーが押された場合に呼ばれ、 その時のキーに対応する文字コードを ch として渡すことになる。 システムメッセージパネルのクイック起動パネルは、 命令 + 特殊文字として入力される。 アプリケーションは、 命令 + 文字を受け取ったらこの関数を実行してイベントを解釈する必要がある。

文字コードの言語はシステムスクリプトとして解釈される。

【エラーコード】

EX_MID      : メニュー (mid) は存在していない
              (標準メニューでない場合も含む)。
mget_itm
 
標準メニュー項目の取出し

【形式】

W   mget_itm(W mid, W pnum, MENUITEM *item)

【パラメータ】

W        mid     メニューID
W        pnum    親項目番号
MENUITEM *item   メニュー項目

【リターン値】

≧ 0    正常
< 0    エラー(エラーコード)

【解説】

mid で指定した標準メニューの pnum で指定した親項目番号 ( 0 〜 ) のメニュー項目の内容を取り出し、 item で指定した領域に格納する。 関数値は0が戻る。

【エラーコード】

EX_ADR      : アドレス(item)のアクセスは許されていない。
EX_MID      : メニュー(mid)は存在していない
              (標準メニューでない場合も含む)。
EX_PAR      : パラメータが不正である(pnum が不正)。
mset_itm
 
標準メニュー項目の設定

【形式】

ERR mset_itm(W mid, W pnum, MENUITEM *item)

【パラメータ】

W         mid     メニューID
W         pnum    親項目番号
MENUITEM *item    メニュー項目

【リターン値】

≧ 0    正常
< 0    エラー(エラーコード)

【解説】

mid で指定した標準メニューの pnum で指定した親項目番号 ( 0 〜 ) のメニュー項目の内容を、 item で指定した領域に格納してある内容に変更する。

項目リストの内容を直接変更した場合は、 メニュー項目の内容自体は変更なくても、 mset_itm() を行なう必要がある。

【エラーコード】

EX_ADR      : アドレス(item)のアクセスは許されていない。
EX_MID      : メニュー(mid)は存在していない(標準メニューでない場合も含む)。
EX_PAR      : パラメータが不正である(pnum が不正、メニュー項目の内容が不正)。
EX_DNUM     : データ番号で指定したデータがデータマネージャに登録されていない。
mchg_atr
 
標準メニューの項目属性の変更

【形式】

W   mchg_atr(W mid, W selnum, UW mode)

【パラメータ】

W   mid メニューID
W   selnum  選択番号
UW  mode    ::=  ( M_STAT) ‖ (( M_SEL ‖ M_NOSEL) | ( M_ACT ‖ M_INACT) )

    M_STAT : 変更しない。      (現在の属性を取り出す)
    M_SEL  : 選択状態とする。  (選択フラグをセット)
    M_NOSEL: 選択状態としない。(選択フラグをリセット)
    M_ACT  : 不能項目としない。(不能項目フラグをリセット)
    M_INACT: 不能項目とする。  (不能項目フラグをセット)

【リターン値】

≧ 0    正常(関数値は項目の現在の属性)
< 0    エラー(エラーコード)

【解説】

mid で指定した標準メニューの selnum で指定した選択番号を持つメニュー項目の不能項目フラグ、 選択フラグを変更して、 その結果としての現在の属性を関数値として戻す。 メニュー項目リスト内の属性コード自体は変更されない。

関数値として戻る現在の属性は以下に示す内容となる。 この属性は項目リスト内の属性コードも考慮した実際の属性であるため、 M_NOSEL、または M_ACT を指定した場合でも属性コードの値によっては、変化しない場合もある。

動作項目の場合 (MC_IND=0) は、 M_SEL / M_NOSEL の指定は無視され、 関数値の M_SEL は常に 0 となる。

mchg_atr
図 77 : mchg_atr

【エラーコード】

EX_MID      : メニュー(mid)は存在していない(標準メニューでない場合も含む)。
EX_PAR      : パラメータが不正である(selnum が不正)。
mchg_dsp
 
標準メニューのデフォルト表示属性の変更

【形式】

W   mchg_dsp(MENUDISP *attr, W posattr)

【パラメータ】

MENUDISP *attr   メニュー表示属性
W        posattr 表示位置属性

【リターン値】

≧ 0    正常(関数値は変更後の表示位置属性)
< 0    エラー(エラーコード)

【解説】

標準メニューのデフォルト表示属性を、 attr で指定した内容に変更し、 表示位置属性を posattr で指定した値に変更する。 変更した内容は、以後の全てのメニュー表示に反映される。

attr = NULL の場合は表示属性は変更せず、 posattr < 0 の場合は表示位置属性は変更しない。 関数値として変更後の表示位置属性が戻る。

【エラーコード】

EX_ADR      : アドレス(attr)のアクセスは許されていない。
EX_DNUM     : データ番号で指定したデータがデータマネージャに登録されていない。
mcre_gmn
 
汎用メニューの登録

【形式】

MNID    mcre_gmn(GMENU *gm)

【パラメータ】

GMENU   *gm 汎用メニュー

【リターン値】

≧ 0    正常(関数値は登録されたメニューID)
< 0    エラー(エラーコード)

【解説】

gm で指定した汎用メニューを登録する。

登録後も、gm で指定した メニュー項目内の ptr で示された項目リストは参照されるため、 保存しておかなければいけない。 項目リストの内容は登録後は変更することはできない。

項目数が 32 を越える場合は、32 として登録する。

表示属性で指定されたパターンデータ番号が不正な場合は、 デフォルトパターンで登録される。

この関数では、メニューの登録のみで、 メニューの実際の表示は msel_gmn() により行なわれる。

関数値としてメニュー ID ( > 0 ) が戻され、 以後そのメニューの操作の際に使用する。 メニュー ID はプロセス依存であるため登録したプロセスでのみ有効であり、 メニュー ID を他のプロセスに渡してメニューの操作を行なうことはできない。

【エラーコード】

EX_ADR      : アドレス(gm)のアクセスは許されていない。
EX_NOSPC    : システムのメモリ領域が不足した。
EX_PAR      : パラメータが不正である(メニューの内容が不正)。

メモリ領域が不足して登録できない場合、通常は核エラーコードが返される。

mopn_gmn
 
汎用メニューのデータボックスからの登録

【形式】

MNID    mopn_gmn(W dnum)

【パラメータ】

W   dnum    GMENU_DATA タイプのデータ番号

【リターン値】

≧ 0    正常(関数値は登録されたメニューID)
< 0    エラー(エラーコード)

【解説】

dnum で指定したデータ番号を持つ、 " GMENU_DATA" タイプのデータボックス定義データにより汎用メニューを登録する。

この関数は、 メニューの定義データがデータボックスとして定義されている点を除いて、 その動作は、mcre_gmn() と全く同一である。

【エラーコード】

EX_DNUM     : データ(dnum等)はデータマネージャに登録されていない。
EX_NOSPC    : システムのメモリ領域が不足した。
EX_PAR      : パラメータが不正である(メニューの内容が不正)。

メモリ領域が不足して登録できない場合、通常は核エラーコードが返される。

mdel_gmn
 
汎用メニューの削除

【形式】

ERR mdel_gmn(W mid)

【パラメータ】

W   mid メニューID

【リターン値】

≧ 0    正常
< 0    エラー(エラーコード)

【解説】

mid で示された登録済み汎用メニューを削除する。

登録したプロセスが終了した場合、 メニューは自動的に削除されるが、 基本的に不要になった時点で明示的に削除することが望ましい。

【エラーコード】

EX_MID      : メニュー(mid)は存在していない(汎用メニューでない場合も含む)
msel_gmn
 
汎用メニューの選択動作

【形式】

W   msel_gmn(W mid, PNT pos)

【パラメータ】

W       mid メニューID
PNT     pos 画面上の絶対座標

【リターン値】

≧ 0    正常(関数値は選択された項目の番号(選択されなかった場合は0))
< 0    エラー(エラーコード)

【解説】

mid で指定した登録済み汎用メニューを pos で指定したスクリーン上の絶対座標位置に汎用メニューの矩形の左上の点を合わせて表示し、 PD の移動に従った選択動作を行ない、 PD の動作に応じて選択された項目の番号 ( 1 〜 128 ) を関数値として戻す。 何も選択されなかった場合は、関数値は 0 となる。

pos は、 通常メニューボタンのプレスが行なわれた位置を絶対座標で指定する。 pos が不正な場合は、適当な位置から動作する。

メニュー動作中に発生した EV_BUTDWN, EV_BUTUP,EV_KEYDWN, EV_KEYUP, EV_AUTKEY は、 イベントキューから取り除かれて捨てられる。 それ以外のイベントはイベントキューに残される。

なお、この関数内ではポインタ形状変更は行なわないため、 通常、実行前に「選択指」のポインタ形状にしておく必要がある。 イメージ退避領域が確保できない場合は、 メニュー動作終了後すべてのウィンドウに再表示要求が送られる。

【エラーコード】

EX_MID      : メニュー(mid)は存在していない(汎用メニューでない場合も含む)
mchg_gat
 
汎用メニューの項目属性の変更

【形式】

W   mchg_gat(W mid, W num, UW mode)

【パラメータ】

W   mid     メニューID
W   num     メニュー項目番号
UW  mode    ::=  ( M_STAT) ‖ (( M_SEL ‖ M_NOSEL) | ( M_ACT ‖ M_INACT) )

    M_STAT : 変更しない。      (現在の属性を取り出す)
    M_SEL  : 選択状態とする。  (選択フラグをセット)
    M_NOSEL: 選択状態としない。(選択フラグをリセット)
    M_ACT  : 不能項目としない。(不能項目フラグをリセット)
    M_INACT: 不能項目とする。  (不能項目フラグをセット)

【リターン値】

≧ 0    正常(関数値は項目の現在の属性)
< 0    エラー(エラーコード)

【解説】

mid で指定した汎用メニューの num で指定したメニュー項目の不能項目フラグ、 選択フラグを変更して、その結果としての現在の属性を関数値として戻す。 項目リスト内の属性コード自体は変更されない。

関数値として戻る現在の属性は以下に示す内容となる。 この属性は項目リスト内の属性コードも考慮した実際の属性であるため、 M_NOSEL、または M_ACT を指定した場合でも属性コードの値によっては、 変化しない場合もある。

動作項目の場合 (MC_IND = 0)は、 M_SEL / M_NOSEL の指定は無視され、 関数値の M_SEL は常に 0 となる。

mchg_gat
図 78 : mchg_gat

【エラーコード】

EX_MID      : メニュー(mid)は存在していない(汎用メニューでない場合も含む)。
EX_PAR      : パラメータが不正である(numが不正)。
mchg_dtm
 
標準メニューのディレイタイムの変更

【形式】

W   mchg_dtm(W time)

【パラメータ】

W   time    ミリ秒単位のディレイタイム

【リターン値】

≧ 0    正常(変更以前のディレイタイム)
< 0    エラー(エラーコード)

【解説】

標準メニュー選択時の操作性を上げるために設定されているメインメニュー内での反応の遅れ ( ディレイタイム ) を、 time で指定した値に変更し、 変更以前の値を関数値として取り出す。 time < 0 の場合は変更せずに現在値を取り出す。 なお、システムスタートアップ時には、 ディレイタイムとして適当なデフォルト値が設定されているものとする。

【エラーコード】

発生しない


この章の目次にもどる
前頁:3.1 ウィンドウマネージャにもどる
次頁:3.3 パーツマネージャにすすむ