我有一个窗口,我希望能够控制它出现的位置。但是,在调用“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,它使用带有参数的类似数组。