ウィンドウがあり、表示される場所を制御できるようにしたいと考えています。ただし、「XMapWindow」が呼び出される前に「XMoveWindow」を呼び出しても効果がないようです。
ドキュメントは何も言いません。ヘルプ?
XtCreateWindowには x座標と y 座標があるため、作成時に位置を指定できます。X サーバーは、ウィンドウが初めてマップされる前にそのウィンドウを認識する必要がないことに注意してください。したがって、マップされていないウィンドウを移動しても、何の効果もありません。
しかし、XtCreateWindow はメイン ウィンドウのサブウィンドウに対してのみ機能します。トップレベル ウィンドウ (メイン アプリまたはポップアップ ダイアログ) を配置する場合は、ウィンドウ マネージャーと相談してウィンドウを配置する必要があります。次のコード スニペットは、メイン ウィンドウの Xt ライブラリを使用してこれを行います。
Arg args[] = {
{ XtNx, (dis_width - WIN_WIDTH) / 2},
{ XtNy, (dis_height - WIN_HEIGHT) / 2},
{ XtNwidth, WIN_WIDTH},
{ XtNheight, WIN_HEIGHT},
{ XtNborderWidth, 10},
{ "minWidth", WIN_WIDTH},
{ "minHeight", WIN_HEIGHT},
{ "maxWidth", WIN_WIDTH},
{ "maxHeight", WIN_HEIGHT},
{ "mwmDecorations", 0xA}, // border + title; see MWM_DECOR_ constants
{ "mappedWhenManaged", False},
};
shell = XtAppCreateShell (_ ("Welcome"), NULL, applicationShellWidgetClass, Dis, args, XtNumber (args));
画面の中央にウィンドウを作成します。
ポップアップ ウィンドウについては、XtCreatePopupShellを参照してください。これは、同様の配列と引数を使用します。