gpt4 book ai didi

c++ - 如何在 SFML 中使窗口始终位于顶部?

转载 作者:行者123 更新时间:2023-11-28 04:54:03 28 4
gpt4 key购买 nike

我正在尝试使用 SFML 制作一个程序,该程序的窗口始终位于最前面。我如何使用 SFML 实现这一目标?我四处搜索但无济于事。

“程序”是屏幕中间的一个小红点,可以模仿十字准线,我需要它位于所有内容之上,因为真正的游戏会在后台(游戏没有十字准线,只有瞄准).

我唯一的想法是使用 SFML 的方法 getSystemHandle(),它会给我一个窗口的特定于操作系统的句柄。我将 Ubuntu 16.04 与 Gnome 和 X 一起使用,我不太确定在获得句柄后如何编写该功能。

最佳答案

当前版本的 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_displaym_window 等和/或将拉取请求重新实现到您的源版本中。

关于c++ - 如何在 SFML 中使窗口始终位于顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47559527/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com