XMoveWindow在XMapWindow之前不工作

时间:2013-02-10 19:12:13

标签: window x11

我有一个窗口,我希望能够控制它出现的位置。但是,在调用“XMapWindow”之前调用“XMoveWindow”似乎没有效果。

docs没有说什么。帮助

1 个答案:

答案 0 :(得分:1)

XtCreateWindow中有x和y坐标,因此您可以在创建时指定位置。请注意,X服务器在第一次映射之前不必了解窗口,因此移动未映射的窗口可能没有任何影响。

但是XtCreateWindow仅适用于主窗口的子窗口;如果要放置顶级窗口(主应用程序或弹出对话框),则必须与窗口管理器协商放置窗口。以下代码片段使用主窗口的Xt lib执行此操作:

  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,它使用带参数的类似数组。