如何将窗口始终放在SFML的顶部

How to make window always on top in SFML?

本文关键字:SFML 顶部 窗口      更新时间:2023-10-16

我正在尝试使用sfml的窗口始终停留在顶部。如何使用SFML实现这一目标?我四处搜索,但无济于事。

" program"是屏幕中间的一个小红点,可以模仿十字准线,我需要它在所有内容中,因为真实的游戏将在后台(游戏没有十字路口,只有目击)。

我唯一的想法是使用SFML的方法getSystemHandle(),这将为我提供特定于窗口的操作系统手柄。我正在使用gnome和X使用Ubuntu 16.04,并且我不太确定如何获得句柄后如何编码该功能。

当前版本的SFML不可能,但是由于您只需要X,因此您只需使用此旧/拒绝的拉请请求中的摘要就可以自己实现它。<<<<<<<<<<<<<<

void WindowImplX11::setTopmost(bool topmost)
{
    static Atom wmStateAbove = XInternAtom(m_display, "_NET_WM_STATE_ABOVE", 1);
    static Atom wmNetWmState = XInternAtom(m_display, "_NET_WM_STATE", 1);
    if (wmStateAbove)
    {
        XClientMessageEvent emsg;
        memset(&emsg, 0, sizeof(emsg));
        emsg.type = ClientMessage;
        emsg.window = m_window;
        emsg.message_type = wmNetWmState;
        emsg.format = 32;
        emsg.data.l[0] = topmost;
        emsg.data.l[1] = wmStateAbove;
        XSendEvent(m_display, RootWindow(m_display, m_screen), false, SubstructureRedirectMask | SubstructureNotifyMask, (XEvent*)&emsg);
    }
}

您必须独自检索m_displaym_window等。