X Toolkit: Scrollbar Widget / thumbの位置設定

X Toolkit (Athena Widget)のスクロールバー・ウィジット(Scrollbar Widget)において, サム(thumb;つまみ)のデフォルトの初期位置は,水平スクロールバーの場合は左端, 垂直スクロールバーの場合は上端になっています. しかし,アプリケーションによってはアプリケーション開始直後のサムの位置を左端以外の位置にしたい場合もあります. この文書ではスクロールバー・ウィジットのサムを任意の位置に設定する方法を説明します.

X Toolkitプログラミングの古い文献[1]を参照すると,サムの初期位置を変える方法として以下の2通つの方法が紹介されています.

  1. リソースXtNtopの値を0.0(左端または上端)〜1.0(右端または下端)の任意の値にセットしておく([1]p.129).
  2. XtScrollbarSetThumb関数(?)を使って任意の位置を指定する([1]p.132).

いずれの方法も妥当な方法と思われるのですが,実際にやってみると,いずれも期待通りは動作してくれません. リソースXtNtopOfThumbを指定してもサムの初期位置は変化しません. また,XawScrollbarSetThumb関数を使って設定しようとすると スクロールバーの表示がおかしくなってサムが表示されなくなってしまいます.

正しくサムの位置を設定するには以下のような手順でリソースXtNtopOfThumbの値をセットする必要があるようです.

0001    Widget toplevel, bar;
0002    float top = 0.5;
0003    static Arg argsBar[] = {
0004        {XtNlength, (XtArgVal)300},
0005        {XtNtopOfThumb, (XtArgVal)NULL},
0006    };

0007    toplevel = XtInitialize(argv[0], "Bar", NULL, 0, &argc, argv);
0009    bar = XtCreateManagedWidget("bar", scrollbarWidgetClass, toplevel,
                                    argsBar, XtNumber(argsBar));
0010    XtSetArg(argsBar[1], XtNtopOfThumb, *(XtArgVal *) &top);
0011    XtSetValues(bar, argsBar, XtNumber(argsBar));

この方法でサムの初期位置がうまく設定できるはずです (ネットで検索してみると同様の手続きでサムの位置を設定しているプログラム[2]が見つかりました. こちらも参照してみてください). 以下に実験用のサンプル・プログラムのソースをおいておきますので,試してみてください.

参考文献

備考


Takashi HATAI
Jul. 24, 2000