gpt4 book ai didi

c# - openTk .net 核心保持窗口始终在顶部

转载 作者:行者123 更新时间:2023-11-30 17:34:34 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来使窗口始终位于顶部。 (必须是窗口模式)我目前正在使用 OpenTk.NetCore 库在 .net 核心中制作一个窗口。是否可以使用 OpenTk 将此窗口保持在顶部或是否有其他方法?它必须在 .Net 核心中 ...

我当前的代码:

    public class Display : GameWindow
{
public Display() : base(400, 300, GraphicsMode.Default)
{
//display window in top left corner
this.X = 0;
this.Y = 0;
//TODO : window should always been displayed on top
VSync = VSyncMode.On;
WindowBorder = WindowBorder.Hidden; //no title & border
//WindowState = WindowState.Fullscreen;
}

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);

GL.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL.Enable(EnableCap.DepthTest);
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);

GL.Viewport(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, ClientRectangle.Height);

Matrix4 projection = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, Width / (float)Height, 1.0f, 64.0f);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadMatrix(ref projection);
}

protected override void OnUpdateFrame(FrameEventArgs e)
{
base.OnUpdateFrame(e);

if (Keyboard[Key.Escape])
Exit();
}

protected override void OnRenderFrame(FrameEventArgs e)
{
base.OnRenderFrame(e);

GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

Matrix4 modelview = Matrix4.LookAt(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadMatrix(ref modelview);
GL.Begin(PrimitiveType.Triangles);

GL.Color3(1.0f, 0.0f, 0.0f); GL.Vertex3(2.0f, 1.0f, 4.0f);
GL.Color3(1.0f, 0.0f, 0.0f); GL.Vertex3(1.2f, 1.0f, 4.0f);
GL.Color3(1.0f, 0.0f, 0.0f); GL.Vertex3(1.6f, 1.5f, 4.0f);
GL.End();

SwapBuffers();
}
}
public class Program
{
[STAThread]
public static void Main(string[] args)
{
/*
* The 'using' idiom guarantees proper resource cleanup.
* We request 30 UpdateFrame events per second, and 30
* RenderFrame events.
*/
using (Display display = new Display())
{
display.Run(30.0,30.0);
}

}
}

最佳答案

OpenTK 不支持这个。您可以检测窗口的焦点、位置、大小等何时发生变化,但我不相信您可以直接影响焦点。

此外,至少在 Windows 上,实际上并没有任何“合法”的方法来实现这一点,因为无法保证 Windows 中的任何一个程序始终高于其他程序。您可以尝试各种尝试,例如检测 Windows 焦点何时丢失 (NativeWindow.FocusChanged),然后调用一些 user32 函数,例如 SetForegroundWindow , BringWindowToTop等,但这是一场艰苦的战斗,并不可取。其他操作系统/窗口管理器可能对此有不同的支持。

关于c# - openTk .net 核心保持窗口始终在顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42270084/

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