XUnmapWindow()
从显示屏上完全移除窗口。通过EMWH ICCCM 状态最小化一个窗口,以便窗口管理器知道该窗口仍然以某种形式存在。就像您已经假设您负责重置屏幕分辨率一样。顺便说一句,这在 Windows 中是一样的。
编辑:
在 Xlib 中最小化一个窗口是用 来完成的XIconifyWindow
,它将注意设置正确的 ICCCM 属性,并取消映射窗口。两者都必须完成才能与 WM 正确交互。然而,X11 只定义了方法,而不是策略,所以在取消映射全屏窗口时,您还需要负责重置屏幕分辨率,就像我在上面已经写过的那样。
附带说明:我建议您根本不要更改分辨率,但是,如果可以,则渲染到目标大小的帧缓冲区对象,并将最终结果映射到完整的本机屏幕大小。如果将其与原始分辨率文本/HUD 叠加(我假设这是用于游戏或类似游戏)结合使用,您将获得更高的感知质量并节省分辨率切换。您甚至可以将其与截取桌面屏幕截图并逐渐淡入您的内容相结合。
EDIT 2 供参考
:
XIconifyWindow
只是一个辅助/便利功能,它的源代码是
/*
* This function instructs the window manager to change this window from
* NormalState to IconicState.
*/
Status XIconifyWindow(Display *dpy, Window w, int screen)
{
XClientMessageEvent ev;
Atom prop;
prop = XInternAtom(dpy, "WM_CHANGE_STATE", False);
if(prop == None)
return False;
ev.type = ClientMessage;
ev.window = w;
ev.message_type = prop;
ev.format = 32;
ev.data.l[0] = IconicState;
return XSendEvent(dpy, RootWindow(dpy, screen), False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev);
}