Ubuntu 中的 Mono winforms 应用程序全屏?
-
26-09-2019 - |
题
只是想知道是否有一种已知的方法可以让 Mono System.Windows.Forms 应用程序在 Ubuntu/Gnome 上全屏显示。
单声道为2.4.2.3 Ubuntu是9.10
在 Windows 上执行此操作需要 pinvoke,显然在这里不起作用。
这就是我将窗口边框设置为无、窗口位置设置为中心、状态设置为最大化的结果:
替代文本 http://dl.dropbox.com/u/116092/misc/permalink/joggler/screenshot01.png
更新。
也尝试过:
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;CTRL-F11
文本=字符串.空;// 无标题
最大化框 = false;
最小化框=假;
控制框=假;
表单边框样式=无;
窗口状态=最大化;FormBorderStyle = FormBorderStyle.None;
位置 = 新点(0, 0);
大小 = Screen.PrimaryScreen.Bounds.Size;
所有这些我最终都得到相同的结果。
我遇到过一条涉及 _NET_WM_STATE_FULLSCREEN 的 pinvoke 的线索,但这就是我所掌握的。任何有关这方面的指示将不胜感激。
解决方案
_NET_WM_STATE_FULLSCREEN 将消除边框。GNOME 面板仍然会出现。
根据以下帖子,秘诀是摆脱最小/最大尺寸,以便窗口管理器自行调整大小:
http://linux.derkeiler.com/Mailing-Lists/GNOME/2010-01/msg00035.html
以下是有关本机规范的一些文档:
http://standards.freedesktop.org/wm-spec/wm-spec-latest.html
http://www.x.org/docs/ICCCM/icccm.pdf
要直接与 X Window 系统对话,您必须调用 XLib。为了发送类似 _NET_WM_STATE_FULLSCREEN 的内容,您必须有一个指向窗口和显示器的指针。
我不知道如何找到显示器,但我可以提供指向窗口的指针。当在 X 上运行时,该属性 Form.Handle
应该是指向 X 窗口的指针。
其他提示
不确定“全屏”是什么意思 - 但我已经编写了几个接管屏幕的 Windows.Forms 应用程序,并且没有单个 PInvoke。
这是我配置主表单的方法......
Text = string.Empty; // No caption
MaximizeBox = false;
MinimizeBox = false;
ControlBox = false;
FormBorderStyle = None;
WindowState = Maximized;
可选地,
TopMost = true;
希望这可以帮助。
您需要在 ubuntu 中禁用视觉效果。
编辑:并确保您的表单大小至少为无边框的屏幕分辨率。如果边框是在设计时并且您要在代码中删除它们,则您将需要 1030x796 之类的值来显示 1024x768。
我被这个问题困扰了两天,终于找到了解决方案:单击左侧工具栏上的第一个图标并搜索 compizconfig 程序。进入首选项->unity,你会看到左侧有一个unity插件的勾号。删除该勾号,您将看到顶部菜单栏消失。虽然这个帖子很老了,但我仍然希望我可以帮助任何遇到这个问题并寻求帮助的人。
你试过这个吗?
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
不幸的是,我现在没有可用的 Ubuntu,但我可以在旧的单声道版本中看到旧的补丁......
应该可以使用“CTRL+F11”热键以全屏模式显示 gnome 中运行的每个应用程序。
也许你可以尝试
System.Windows.Forms.SendKeys.Send();
但这只是一个猜测,我还没有运行 atm 的 Linux 来尝试这个。但也许这有帮助。
我现在无法测试它,但是你尝试过简单的调整大小吗?
form.FormBorderStyle = FormBorderStyle.None
form.Location = Point(0, 0)
form.Size = Screen.PrimaryScreen.Bounds.Size
我现在已经通过设置面板的自动隐藏属性解决了这个问题。
并不理想,因为这取决于用户更改环境来使用我的应用程序,但总比没有好。
以下工作有效:
(灵感来自这里: https://bugzilla.xamarin.com/show_bug.cgi?id=40997)
1)sudo apt-get install wmctrl
2)在你的代码中:
Form form = new MainWindow();
form.FormBorderStyle = FormBorderStyle.None;
form.WindowState = FormWindowState.Maximized;
form.Load += (s, e) => {
Process process = new Process {
StartInfo = new ProcessStartInfo {
FileName = "wmctrl",
Arguments = $"-r :ACTIVE: -b add,fullscreen",
CreateNoWindow = true
}
};
process.Start();
process.WaitForExit();
};
Application.Run(form);