gpt4 book ai didi

c# - 当应用程序通过 Windows API 全屏显示时菜单不合适

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:27 24 4
gpt4 key购买 nike

我用 C# 开发了一个应用程序,我想以全屏模式显示它。它还应该覆盖任务栏。为此,我使用了 Windows API。您可以在下面找到该类:

public sealed class WinAPI
{
[DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
public static extern int GetSystemMetrics(int which);

[DllImport("user32.dll")]
public static extern void
SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
int X, int Y, int width, int height, uint flags);

private const int SM_CXSCREEN = 0;
private const int SM_CYSCREEN = 1;
private static IntPtr HWND_TOP = IntPtr.Zero;
private const int SWP_SHOWWINDOW = 64; // 0×0040

public static int ScreenX
{
get { return GetSystemMetrics(SM_CXSCREEN); }
}

public static int ScreenY
{
get { return GetSystemMetrics(SM_CYSCREEN); }
}

public static void SetWinFullScreen(IntPtr hwnd)
{
SetWindowPos(hwnd, HWND_TOP, 0, 0, ScreenX, ScreenY, SWP_SHOWWINDOW);
}
}

我将此类与以下表单设置结合使用以进入全屏模式:

private void terminalModeToolStripMenuItem_Click(object sender, EventArgs e)
{
// Remove the border.
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.Bounds = Screen.PrimaryScreen.Bounds;

// Full screen windows API hack.
WinAPI.SetWinFullScreen(this.Handle);
}

有趣的部分来了。如果我单击菜单栏中的按钮,按钮和菜单之间会出现间隙,如下图所示:

menuItem offset

有谁知道如何解决这个问题?我希望它像这样显示:

menuItem without offset

为什么会发生这种情况?

最佳答案

正如 Muraad 在 his comment 中指出的那样,尝试将以下代码块移动到您的表单加载事件中:

// Remove the border.
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.Bounds = Screen.PrimaryScreen.Bounds;

然后查看问题是否仍然存在。

关于c# - 当应用程序通过 Windows API 全屏显示时菜单不合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733243/

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