XmResolvePartOffsets(3XM) — NEWS-OS Programmer’s Manual
名称
XmResolvePartOffsets — 上位互換なアプリケーションと widget の記述を可能にする関数
形式
#include <Xm/XmP.h> void XmResolvePartOffsets (widget_class, offset )
WidgetClass widget_class ;
XmoffsetPtr ∗ offset ;
解説
オフセットレコードの使用は、1 つの widget クラスに対して 1 つの特別なグローバル変数を必要とします。 この変数は、widget 構造体の各部分の widget レコードへのオフセットの配列へのポインタによって構成されます。 XmResolvePartOffsets 関数は、アプリケーションによって必要とされたレコードのオフセットを割り当て、アプリケーションと widget の上位互換性を保証します。 これらのオフセットレコードは、widget が widget のすべての変数にアクセスするために使用されます。 widget は以下のステップを必要とします。
•リソースのリストを作る代りに、widget はリソースのオフセットのリストを作ります。 これを行うには、XmPartResouce 構造体と XmPartOffset マクロを使います。 XmPartResource データ構造体はリソースのリストのように見えますが、オフセットに 1 つの interger を持つ代りに 2 つの short を持っています。 これは、通常のリソースリストであるかのように、クラス内におかれます。 オフセットとして XtOffset を使用するかわりに、XmPartOffset を使用します。
•クラスレコード中に widget のサイズを置く代りに、widget はその同じフィールドに widget の部分を置きます。
•クラスレコード中に XtVersion を置く代りに、XtVersionDontCheck を置きます。
•widget はレコードのオフセットを指す変数を定義します。 これは、widget のクラスレコードの一部か、または、別のグローバル変数とすることができます。
•クラスの初期化の際に、widget は XmResolvePartOffsets を呼び出します。 それをオフセットとクラスレコードに渡します。 これは、以下のことを行います。
スーパークラス (定義によって、既に初期化されている) のサイズフィールドをパートサイズフィールドに加える。
スーパークラスの数を基準として配列を割り当てる。
すべての widget の部分のオフセットに適切な値を設定する。 この値はすべてのスーパークラスのレコードのサイズフィールドを調べることによって決定される。
リソースリスト中のオフセットのエントリを実際のオフセットに修正するために、パートオフセットの配列を使用する。
•直接フィールドにアクセスする代りに、widget はオフセットテーブルを通してアクセスします。 各フィールドに関して、アクセスを容易にするようなマクロを以下のように定義することができます。 たとえば、整数フィールド「 xyz 」を考えます。 #define BarXyz(w) (∗(int ∗) (((char ∗) w) + offset[BarIndex] + \XtOffset(BarPart, xyz)))
XmField マクロはフィールドへのアクセスを容易にします。 XmPartOffset と XmField マクロは、それらをつなげるので、part 引数の前後には空白を入れてはいけません。 たとえば、次の例は、part(Label) の引数の前に空白が入っているので、動作しません。
XmField(w, offset, Label, text, char ∗ )
XmPartOffset( Label, text ) そこで、ここに説明したように、part(LABEL) 引数の前後には空白を入れてはいけません。
XmField(w, offset,Label, text, char ∗ )
XmResolvePartOffsets の引数は、下のように定義されています。
widget_class生成された widget の widget クラスのポインタを指定する。
offsetオフセットレコードを指定する。
NEWS-OSRelease 4.1C