Wie können Sie eine dotNet Windows (oder WPF) -Anwendung programmieren, damit sie auf dem sekundären Monitor im Vollbildmodus angezeigt wird?Vollbildmodus auf dem sekundären Monitor
Antwort
Siehe this codeproject article.
Der Code in es wird funktionieren, aber standardmäßig auf Ihrem primären Monitor. Um dies zu ändern, müssen Sie die Aufrufe von GetSystemMetrics in Aufrufe GetMonitorInfo ersetzen. Mit GetMonitorInfo können Sie das entsprechende RECT an SetWindowPos übergeben.
Mit GetMonitorInfo können Sie den RECT für jeden Monitor abrufen.
Es gibt eine MSDN Article on Position Apps in Multi-Monitor Setups, die helfen könnte, die Dinge ein bisschen besser zu erklären.
private void Form1_Load(object sender, EventArgs e)
{
this.FormBorderStyle = FormBorderStyle.None;
this.Bounds = GetSecondaryScreen().Bounds;
}
private Screen GetSecondaryScreen()
{
foreach (Screen screen in Screen.AllScreens)
{
if (screen != Screen.PrimaryScreen)
return screen;
}
return Screen.PrimaryScreen;
}
Es ist nicht von der Frage deutlich, wenn Sie nach einem Weg suchen, um das Fenster zu dem sekundären Bildschirm zu bewegen und dann Vollbild gehen, oder wenn Sie gerade suchen auf Vollbild-Modus zu unterstützen, was auch immer Monitor das Fenster auf ist (was primär oder sekundär sein kann).
Wenn das später für ein WPF-Fenster, obwohl nicht ganz das gleiche wie Vollbild-Modus, können Sie die Rahmen entfernen, wenn es maximiert ist und den Rahmen wiederherstellen, wenn nicht maximiert. Es muss nicht überprüft werden, welcher Monitor o.ä. angezeigt wird. Die Anzeige der Titel-/Titelleiste wird durch den Grenzzustand gesteuert.
protected override void OnStateChanged(EventArgs e)
{
if (WindowState == WindowState.Maximized)
{
if (WindowStyle.None != WindowStyle)
WindowStyle = WindowStyle.None;
}
else if (WindowStyle != WindowStyle.SingleBorderWindow)
WindowStyle = WindowStyle.SingleBorderWindow;
base.OnStateChanged(e);
}
Kredit geht an Pavel für seine formularbasierte Antwort in der aktuellen Frage und Nir für seine Antwort in this question.
Für WPF-Anwendungen sehen Sie this post. Letztendlich hängt es davon ab, wann der WindowState auf Maximiert gesetzt ist. Wenn Sie es in XAML oder im Fensterkonstruktor festlegen (d. H. Bevor das Fenster geladen wird), wird es immer auf die primäre Anzeige maximiert. Wenn Sie andererseits WindowState auf Maximum setzen, wenn das Fenster geladen wird, wird es auf dem Bildschirm maximiert, auf dem es zuvor maximiert wurde.
** Vielen Dank! ** Das Verschieben des Wiederherstellungsstellungscodes aus dem Fensterklassenkonstruktor in den _Loaded_-Handler half. Das einzige, was ich hinzufügen sollte, ist, dass die Window-Klasse die _LocationChanged_-Benachrichtigung mit den Standardeinstellungen vor dem Senden der _Loaded_-Benachrichtigung sendet. Sie sollten daher die _LocationChanged_-Benachrichtigung überspringen, bis Sie die Fensterposition in _Loaded_ handler wiederherstellen. – Mar
In WPF: Legen Sie die WindowState-Eigenschaft in Normal (nicht maximiert) fest und erstellen Sie das Ereignis Loaded. Für den Fall, schreibt diesen Code:
this.Left = SystemParameters.PrimaryScreenWidth + 100;
this.WindowState = System.Windows.WindowState.Maximized;
Das setzt voraus, dass der sekundäre Monitor rechts von dem primären Monitor ist. – Paul
Erweiterungsmethode ein Fenster zu dem sekundären Monitor zu maximieren (wenn es einen gibt). Nimmt nicht an, dass der sekundäre Monitor System.Windows.Forms.Screen.AllScreens [2] ist;
using System.Linq;
using System.Windows;
namespace ExtendedControls
{
static public class WindowExt
{
// NB : Best to call this function from the windows Loaded event or after showing the window
// (otherwise window is just positioned to fill the secondary monitor rather than being maximised).
public static void MaximizeToSecondaryMonitor(this Window window)
{
var secondaryScreen = System.Windows.Forms.Screen.AllScreens.Where(s => !s.Primary).FirstOrDefault();
if (secondaryScreen != null)
{
if (!window.IsLoaded)
window.WindowStartupLocation = WindowStartupLocation.Manual;
var workingArea = secondaryScreen.WorkingArea;
window.Left = workingArea.Left;
window.Top = workingArea.Top;
window.Width = workingArea.Width;
window.Height = workingArea.Height;
// If window isn't loaded then maxmizing will result in the window displaying on the primary monitor
if (window.IsLoaded)
window.WindowState = WindowState.Maximized;
}
}
}
}
arbeiten wie ein Charme ... – kennyzx
Ich bemerke eine Antwort, die die Position in der Loaded-Ereignis tritt für Einstellung, aber dies führt zu flackern, wenn das Fenster der ersten Normal gezeigt wird dann maximiert. Wenn Sie in Ihrem Konstruktor zum SourceInitialized Ereignisse abonnieren und die Position in es handhabt es auf sekundäre Monitoren ohne Flimmern zu maximieren - ich nehme an, dass WPF hier
public MyWindow()
{
SourceInitialized += MyWindow_SourceInitialized;
}
void MyWindow_SourceInitialized(object sender, EventArgs e)
{
Left = 100;
Top = 50;
Width = 800;
Height = 600;
WindowState = WindowState.Maximized;
}
Ersatz coords für jeden auf dem sekundären Monitor
- 1. Anzeige im Vollbildmodus am sekundären Monitor mit Qt
- 2. Ordnerdialogfeld in einem sekundären Monitor
- 3. Warum funktioniert WPF MediaElement nicht auf dem sekundären Monitor?
- 4. Windows-Formular auf einem sekundären Monitor anzeigen?
- 5. Wie wird ein TIF-Bild im Vollbildmodus auf dem zweiten Monitor in C# angezeigt?
- 6. OS X Fenster Vollbild auf dem sekundären Monitor mit Cocoa anzeigen
- 7. Wie kann ich ein Formular auf einem sekundären Monitor anzeigen?
- 8. Aktivieren Sie den sekundären Monitor programmgesteuert
- 9. Ist es möglich, die Anzeige von einem sekundären Monitor zu klonen und in einem Fenster auf dem primären Monitor anzuzeigen?
- 10. Cocoa Vollbild-Fenster auf dem sekundären Display
- 11. Präsentation windows phone 7 auf dem Monitor
- 12. Monitor-Modus auf dem Mac - mit Scapy
- 13. Warum kann VS2008 kein Ausnahmeroutine-Popup auf einem sekundären Monitor platzieren?
- 14. Ffplay Dual Monitor Setup
- 15. Ausführen von Code auf dem Hauptthread von einem sekundären Thread?
- 16. Delphi 2010 Formen zeigt auf "falschen" Monitor
- 17. Welcher Monitor ist aktiv?
- 18. zwingen Programmatically eine UIWebView in dem Vollbildmodus
- 19. Öffnen einer neuen Browserseite auf dem zweiten Monitor
- 20. QInputDialog erscheint auf dem Monitor Ich habe Fokus
- 21. WPF-Vollbildmodus
- 22. Ein Prozess aus dem Process Monitor ausgeblendet
- 23. pyplot: Ändern der Schriftarteigenschaften auf sekundären Achsenbeschriftungen
- 24. Bereich Abfrage auf sekundären Index in Cassandra
- 25. Beenden eines sekundären Threads aus dem Haupt-Thread (Kakao)
- 26. has_many: durch sekundären Polymorphismus
- 27. Kann App nicht im Vollbildmodus auf Android
- 28. Anruf Haupt-Thread aus dem sekundären Thread in Android
- 29. Multimonitor - Öffnen Sie das Anwendungsfenster auf dem Monitor in dem Mauszeiger
- 30. Verbessern Sie die Leistung der Grafikleistung im Vollbildmodus im Vollbildmodus?
Dies funktioniert, erfordert aber einen Verweis auf System.Windows.Forms.dll –