○ウィンドウを画面中央に配置し最前面に持ってくる
■画面中央にウィンドウを配置
//画面サイズ取得
int dx = DisplayWidth(XtDisplay(top1),0);
int dy = DisplayHeight(XtDisplay(top1), 0);
// ウィンドウ位置、サイズ取得
unsigned int x,y,width, height, border, depth;
Window rwin;
XGetGeometry(XtDisplay(top1),XtWindow(top1),&rwin,&x, &y, &width, &height, &border, &depth);
//printf("x=%d y=%d width=%d height=%d border=%d depth=%d\n",x,y,width,height,border,depth);
//ウィンドウの位置、サイズ設定
XMoveResizeWindow(XtDisplay(top1),XtWindow(top1),(dx-width)/2,(dy-height-depth)/2,width,height);
■ウィンドウを最前面に持ってくる
//ウィンドウを最前面に移動
XRaiseWindow(XtDisplay(top1),XtWindow(top1));
■2つのウィンドウを中央に配置して、交互に前面に持ってきます
ウィンドウマネージャにより動かない場合あり
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Shell.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
Widget top1,top2,form1,form2;
Widget label1,label2;
int flag=0;
//タイマーとして動作
void timer(XtAppContext app_context)
{
//ここにタイマーの処理内容を書く
if(flag){
//ウィンドウを最前面に移動
XRaiseWindow(XtDisplay(top1),XtWindow(top1));
flag=0;
}else{
//ウィンドウを最前面に移動
XRaiseWindow(XtDisplay(top2),XtWindow(top2));
flag=1;
}
//経過時間後に関数を呼び出す設定(ミリ秒)
XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer,app_context);
}
main(int argc, char **argv)
{
XtAppContext app_context;
XtToolkitInitialize();//初期化
app_context = XtCreateApplicationContext();
Display *d = XtOpenDisplay(app_context, NULL, NULL, NULL, NULL, 0, &argc, argv);;
//form1を作成
{
top1 = XtAppCreateShell("form1", "form1", applicationShellWidgetClass, d,NULL,0);
form1 = XtVaCreateManagedWidget("form1",formWidgetClass,top1,
XtNheight,200,
XtNwidth, 200,
NULL);
XtRealizeWidget(top1);
//画面サイズ取得
int dx = DisplayWidth(XtDisplay(top1),0);
int dy = DisplayHeight(XtDisplay(top1), 0);
// ウィンドウ位置、サイズ取得
unsigned int x,y,width, height, border, depth;
Window rwin;
XGetGeometry(XtDisplay(top1),XtWindow(top1),&rwin,&x, &y, &width, &height, &border, &depth);
//printf("x=%d y=%d width=%d height=%d border=%d depth=%d\n",x,y,width,height,border,depth);
//ウィンドウの位置、サイズ設定
XMoveResizeWindow(XtDisplay(top1),XtWindow(top1),(dx-width)/2,(dy-height-depth)/2,width,height);
}
//form2を作成
{
top2 = XtAppCreateShell("form2", "form2", applicationShellWidgetClass, d,NULL,0);
form2 = XtVaCreateManagedWidget("form2",formWidgetClass,top2,
XtNheight,200,
XtNwidth, 200,
NULL);
XtRealizeWidget(top2);
//画面サイズ取得
int dx = DisplayWidth(XtDisplay(top2),0);
int dy = DisplayHeight(XtDisplay(top2), 0);
// ウィンドウ位置、サイズ取得
unsigned int x,y,width, height, border, depth;
Window rwin;
XGetGeometry(XtDisplay(top2),XtWindow(top2),&rwin,&x, &y, &width, &height, &border, &depth);
//printf("x=%d y=%d width=%d height=%d border=%d depth=%d\n",x,y,width,height,border,depth);
//ウィンドウの位置、サイズ設定
XMoveResizeWindow(XtDisplay(top2),XtWindow(top2),(dx-width)/2,(dy-height-depth)/2,width,height);
}
//ラベルの作成
label1 = XtVaCreateManagedWidget("label1",//ウィジット名
labelWidgetClass,//ラベルクラスを指定
form1,
//リソースの直接入力(どんどん追加できる)
XtNlabel,"Label1 test",//表示される文字
XtNhorizDistance,5,//開始位置
XtNvertDistance,5,
XtNwidth,100,//幅と高さ
XtNheight,20,
XtNborderWidth,1,//境界線
//リソースここまで
NULL);
//ラベルの作成
label2 = XtVaCreateManagedWidget("label2",//ウィジット名
labelWidgetClass,//ラベルクラスを指定
form2,
//リソースの直接入力(どんどん追加できる)
XtNlabel,"Label2 test",//表示される文字
XtNhorizDistance,5,//開始位置
XtNvertDistance,5,
XtNwidth,100,//幅と高さ
XtNheight,20,
XtNborderWidth,1,//境界線
//リソースここまで
NULL);
//経過時間後に関数を呼び出す設定(ミリ秒)
XtAppAddTimeOut(app_context, 500, (XtTimerCallbackProc)timer,app_context);
XtAppMainLoop(app_context);
}
▲トップページ
>
Linux と C