我在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);
}
现在是有趣的部分。如果我单击菜单栏中的按钮,它将显示按钮和菜单之间的间隙,如下图所示:
有谁知道如何解决这个问题?我希望它能像这样出现:
为什么会发生这种情况?
答案 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
。由于应用程序放在任务栏上,因此计算将菜单放在任务栏下方。 (你不能看到它,但它仍然存在)