Полноэкранное приложение Mono winforms в Ubuntu?

Просто интересно, есть ли известный способ заставить приложение Mono System.Windows.Forms работать в полноэкранном режиме в Ubuntu/Gnome.

Моно — 2.4.2.3 Убунту — 9.10

Для этого в Windows требуется пинвок, который здесь явно не сработает.

Вот что я получаю, устанавливая границу окна без значения, положение окна в центре и состояние в максимальном размере:

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

  • Текст = строка.Пустой; // Нет заголовка
    MaximizeBox = false;
    MinimizeBox = false;
    ControlBox = false;
    FormBorderStyle = None;
    WindowState = Maximized;

  • FormBorderStyle = FormBorderStyle.None;
    Location = new Point(0, 0);
    Size = Screen.PrimaryScreen.Bounds.Size;

Все это я заканчиваю с тем же результатом.

Я наткнулся на лид, который включает в себя пинвок с участием _NET_WM_STATE_FULLSCREEN, но это все, что у меня есть. Любые указатели на это будут оценены.


person tomfanning    schedule 12.05.2010    source источник
comment
это крайний случай, удачи.   -  person rook    schedule 16.05.2010
comment
Ага, поэтому и спрашиваю :-)   -  person tomfanning    schedule 17.05.2010
comment
См. мой ответ ниже, если вы в конечном итоге пойдете по маршруту _NET_WM_STATE_FULLSCREEN.   -  person Justin    schedule 24.06.2010


Ответы (10)


_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.

person Justin    schedule 24.06.2010
comment
Я немного поискал в исходниках Mono, и ничего не вызывает _NET_WM_STATE_FULLSCREEN. Мне довольно удобно говорить, что не существует полностью управляемого способа отправить правильную подсказку оконному менеджеру с помощью Mono. Конечно, вы можете использовать GTK#, поскольку он использует GTK+ внизу, а gtk_window_fullscreen() делает то, что вы хотите. - person Justin; 01.07.2010

Не уверен, что вы подразумеваете под «Полный экран», но я написал несколько приложений Windows.Forms, которые занимают экран и без единого PInvoke.

Вот как я настраиваю свою основную форму...

Text = string.Empty; // No caption
MaximizeBox = false;
MinimizeBox = false;
ControlBox = false;
FormBorderStyle = None;
WindowState = Maximized;

По выбору,

TopMost = true;

Надеюсь это поможет.

person Bevan    schedule 21.06.2010
comment
Это очень хорошо работает в Windows, и это здорово, потому что я не знал, что вы можете сделать это без пинвока, чтобы скрыть панель задач. Однако в Mono не повезло: dl.dropbox.com/u /116092/misc/permalink/joggler/screenshot02.png - person tomfanning; 22.06.2010

Вам нужно отключить визуальные эффекты в Ubuntu.

edit: И убедитесь, что размер вашей формы не меньше разрешения экрана без границ. Если границы находятся во время разработки, и вы удаляете их в коде, вам потребуется что-то вроде 1030x796 для дисплея с разрешением 1024x768.

person lars    schedule 24.06.2010

Я страдал от этой проблемы 2 дня, и, наконец, я получил решение: щелкните 1-й значок на левой панели инструментов и найдите программу compizconfig. Перейдите в настройки-> единство, и вы увидите, что с левой стороны есть галочка для плагина единства. Снимите эту галочку, и вы увидите, что верхняя строка меню исчезла. Хотя эта ветка очень старая, но я все еще надеюсь, что смогу помочь любому, кто столкнется с этой проблемой и обратится за помощью.

person user2566916    schedule 18.07.2013

Вы пробовали это?

  this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;             
    this.WindowState = System.Windows.Forms.FormWindowState.Maximized;

К сожалению, у меня сейчас нет Ubuntu, но я вижу старые патчи для этого в старых моно версиях...

person weismat    schedule 17.05.2010
comment
К сожалению, это не выходит за пределы панели задач в верхней части экрана (обновленный пост со скриншотом) - person tomfanning; 17.05.2010
comment
Хорошо, затем попробуйте найти соответствующий вызов C, чтобы перейти в полноэкранный режим. Вызов собственных функций C также работает в Mono. Дайте мне знать, если у вас есть проблемы, но я делал это в прошлом. - person weismat; 18.05.2010
comment
Хммм, Google возвращает _NET_WM_STATE_FULLSCREEN. Это выглядит полезным? - person tomfanning; 26.05.2010
comment
да - но я не нахожу других параметров, необходимых для вызова функции. - person weismat; 27.05.2010

Должна быть возможность отображать каждое приложение, работающее внутри gnome, в полноэкранном режиме с помощью горячей клавиши «CTRL + F11».

Может быть, вы могли бы попробовать

System.Windows.Forms.SendKeys.Send();

но это всего лишь предположение, у меня нет Linux под управлением банкомата, чтобы попробовать это. Но, может быть, это поможет.

person Jürgen Steinblock    schedule 20.05.2010

Я не могу проверить это в данный момент, но вы пробовали простое изменение размера?

form.FormBorderStyle = FormBorderStyle.None
form.Location = Point(0, 0)
form.Size = Screen.PrimaryScreen.Bounds.Size
person fmark    schedule 22.05.2010
comment
Еще один, который хорошо работает в Windows, но результат тот же, что и на втором снимке экрана выше. - person tomfanning; 22.06.2010

На данный момент я обошел это, установив свойство автоматического скрытия панели.

Не идеально, потому что это зависит от того, как пользователь изменит свою среду, чтобы использовать мое приложение, но лучше, чем ничего.

person tomfanning    schedule 22.06.2010
comment
Вы делаете это вручную или в коде? Если последнее, я полагаю, вы всегда можете переключить его, когда ваше приложение получит фокус. Таким образом, вы получаете весь экран, но все остальные приложения ведут себя так, как ожидалось, и система остается такой, какой она была, когда вы закончите. Конечно, вам нужно будет проверить начальное состояние, чтобы убедиться, что оно еще не было автоматически скрыто. Это должно работать так, как вы хотите, даже если это кажется неприглядным. - person Justin; 28.06.2010


Сработало следующее:

(Вдохновение взято отсюда: https://bugzilla.xamarin.com/show_bug.cgi?id=40997)

1) sudo apt-get установить 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);
person Bartek Muszynski    schedule 29.08.2018
comment
В то время как :ACTIVE: работал у меня на VirtualBox, он не работал на планшете Ubuntu. Я заменил :ACTIVE: заголовком окна (свойство Text формы), и это сработало. - person Bartek Muszynski; 29.08.2018
comment
Спасибо! Если бы только у меня все еще было оборудование 8-летней давности ;-) - person tomfanning; 29.08.2018