○内包するウィジットのサイズに合わせてスクロールバーを付ける



■viewportWidgetの中のWigetのサイズに合わせて自動的にスクロールバーが付きます

	Arg ar[16];
	int arc=0;
	XtSetArg(ar[arc], XtNallowHoriz,(XtArgVal)True); arc++;//横スクロールを表示(表示しなければ中身がリサイズされる)
	XtSetArg(ar[arc], XtNallowVert,(XtArgVal)True); arc++;//縦スクロールを表示(表示しなければ中身がリサイズされる)
	XtSetArg(ar[arc], XtNuseRight,(XtArgVal)True); arc++;//横スクロールバーの配置位置(右か左か)
	XtSetArg(ar[arc], XtNuseBottom,(XtArgVal)True); arc++;//縦スクロールバーの配置位置(上か下か)
	XtSetArg(ar[arc], XtNwidth,(XtArgVal)100); arc++;//幅
	XtSetArg(ar[arc], XtNheight,(XtArgVal)100); arc++;//高さ

	Widget viewport = XtCreateManagedWidget ("viewport",viewportWidgetClass,top, ar,arc);


▼ただし、サイズが 横幅:32761 高さ:32765 以上のものは入れられません


■大きなラベルをviewportの中に入れてスクロールバーを表示させるプログラム






#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Viewport.h>

main( int argc, char **argv )
{
	XtAppContext app_context;
	Widget top;

	top = XtVaAppInitialize( &app_context, "test", NULL, 0, &argc, argv, NULL,NULL);


	Arg ar[16];
	int arc=0;
	XtSetArg(ar[arc], XtNallowHoriz,(XtArgVal)True); arc++;//横スクロールを表示(表示しなければ中身がリサイズされる)
	XtSetArg(ar[arc], XtNallowVert,(XtArgVal)True); arc++;//縦スクロールを表示(表示しなければ中身がリサイズされる)
	XtSetArg(ar[arc], XtNuseRight,(XtArgVal)True); arc++;//スクロールバーの配置位置(右か左か)
	XtSetArg(ar[arc], XtNuseBottom,(XtArgVal)True); arc++;//スクロールバーの配置位置(上か下か)
	XtSetArg(ar[arc], XtNwidth,(XtArgVal)100); arc++;//幅
	XtSetArg(ar[arc], XtNheight,(XtArgVal)100); arc++;//高さ

	Widget viewport = XtCreateManagedWidget ("viewport",viewportWidgetClass,top, ar,arc);

	Widget form = XtVaCreateManagedWidget("form",formWidgetClass,viewport,NULL);

	XtVaCreateManagedWidget("Label",labelWidgetClass,form,XtNlabel,"label test",
					XtNwidth,200,//幅と高さ
					XtNheight,200,
					NULL);

	XtRealizeWidget( top );
	XtAppMainLoop( app_context );
}










▲トップページ > Linux と C