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

时间:2015-06-09 13:20:49

标签: c# winforms

我在C#中开发了一个应用程序,我希望以全屏模式显示它。它还应该掩盖任务栏。为此,我使用了Windows API。你可以在下面找到这个课程:

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);
}

我正在使用此类与以下表单设置一起进入全屏模式:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUZZ_SIZE 1024
int search_sign(char *fname, char *str, FILE *fs);
int main(int argc, char *argv[])
{
    char buff[BUZZ_SIZE];
    FILE *f,*f7;
    f7 = fopen("AntiVirusLog.txt", "wt");
    f = fopen(argv[1], "rb");
    if ((fgets(buff, BUZZ_SIZE, f)) != NULL)
    {
        search_sign(argv[2], buff, f7);
        search_sign(argv[3], buff, f7);
        search_sign(argv[4], buff, f7);
        search_sign(argv[5], buff, f7);
        search_sign(argv[6], buff, f7);
    }
    printf("The scan was made successfuly, check the file AntiVirusLog.txt to see the results\n");
    fclose(f);
    fclose(f7);
    system("PAUSE");
    return (0);
}
int search_sign(char *fname, char *str, FILE *fs)
{
    int findres = 0;
    FILE *fp;
    char temp[BUZZ_SIZE];
    if ((fopen_s(&fp, fname, "rb")) != NULL)
    {
        return(-1);
    }
    while ((fgets(temp, BUZZ_SIZE, fp)) != NULL)
    {
        if ((strstr(temp, str)) != NULL)
        {
            fprintf(fs, "%s INFECTED\n", fname);
            findres++;
        }
    }
    if (findres==0)
    {
        fprintf(fs, "%s NOT INFECTED\n", fname);
    }
    fclose(fp);
    return(0);
}

现在是有趣的部分。如果我单击菜单栏中的按钮,它将显示按钮和菜单之间的间隙,如下图所示:

menuItem offset

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

menuItem without offset

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

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

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

看看问题是否仍然存在。

答案 1 :(得分:1)

此问题是由将任务栏设置为屏幕顶部引起的。

可以通过将任务栏移动到屏幕底部,或通过启用任务栏的Auto-hide task bar窗口中的Properties复选框来解决此问题。

编辑:正如@slashp的评论所述。这个问题的根本原因来自绘制菜单的一些内在机制。菜单具有始终在工作区域内绘制的安全性。这似乎是你的screen - task bar。由于应用程序放在任务栏上,因此计算将菜单放在任务栏下方。 (你不能看到它,但它仍然存在)