我正在尝试使用SFML创建一个程序窗口始终位于顶部。如何使用SFML实现这一目标?我四处搜索但无济于事。
"程序"在屏幕中间是一个小红点,可以模仿十字准线,我需要它在一切之上,因为真正的游戏将在后台(游戏没有十字准线,只有瞄准)。
我只有其他想法,就是使用SFML的方法getSystemHandle()
,这将为我提供特定于操作系统的窗口句柄。我正在使用Ubuntu 16.04与Gnome和X,我不太确定在获得句柄后如何编写该功能。
答案 0 :(得分:1)
当前版本的SFML无法实现,但由于到目前为止您只需要X,您可以使用snippet from this old/rejected pull request自行实现。
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_display
,m_window
等,并/或将拉取请求重新实施到您的源版本中。