2009-04-15 16 views

उत्तर

7

अपने प्राथमिक मॉनीटर करने के लिए this codeproject article.

कोड में वहाँ काम करेंगे, लेकिन डिफ़ॉल्ट देखें। इसे बदलने के लिए, आपको GetSystemMetrics को कॉल को प्रतिस्थापित करने की आवश्यकता होगी GetMonitorInfo पर कॉल करेगा। GetMonitorInfo का उपयोग करके, आप SetWindowPos को पास करने के लिए उचित RECT प्राप्त कर सकते हैं।

GetMonitorInfo आपको किसी भी मॉनीटर के लिए आरईसीटी प्राप्त करने की अनुमति देता है।

एक MSDN Article on Position Apps in Multi-Monitor Setups है जो चीजों को थोड़ा बेहतर समझाने में मदद कर सकता है।

5
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; 
} 
+0

पर यह काम करता है लेकिन सिस्टम के लिए एक संदर्भ की आवश्यकता है। Windows.Forms.dll –

0

यह अपने प्रश्न से स्पष्ट नहीं है आप माध्यमिक की निगरानी करने के लिए खिड़की स्थानांतरित करने के लिए और उसके बाद पूर्ण स्क्रीन जाना, या यदि आप बस जो भी नजर रखने के खिड़की पर है पर पूर्ण स्क्रीन मोड का समर्थन करने के लिए देख रहे हैं देख रहे हैं एक तरह से करने के लिए (जो प्राथमिक या माध्यमिक हो सकता है)।

यदि बाद में, एक WPF विंडो के लिए, हालांकि पूर्णस्क्रीन मोड के समान नहीं है, तो आप सीमाओं को हटा सकते हैं जब इसे अधिकतम किया जाता है और सीमा को पुनर्स्थापित नहीं किया जाता है जब अधिकतम नहीं किया जाता है। किस मॉनीटर, आदि की जांच करने की आवश्यकता नहीं है। कैप्शन/टाइटल बार का प्रदर्शन सीमा राज्य द्वारा नियंत्रित होता है।

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

क्रेडिट वर्तमान प्रश्न में अपने फार्म के आधार पर जवाब के लिए और this question में अपने जवाब के लिए Nir को पावेल को जाता है।

8

WPF ऐप्स के लिए this post देखें। आखिरकार यह इस बात पर निर्भर करता है कि विंडोस्टेट को अधिकतम करने के लिए सेट किया गया है। यदि आप इसे एक्सएएमएल या विंडो कन्स्ट्रक्टर में सेट करते हैं (यानी विंडो लोड होने से पहले) इसे हमेशा प्राथमिक डिस्प्ले पर अधिकतम किया जाएगा। यदि, दूसरी तरफ, विंडो विंडो लोड होने पर आप विंडोस्टेट को अधिकतम करने के लिए सेट करते हैं - यह स्क्रीन पर अधिकतम हो जाएगा जिस पर इसे अधिकतम किया गया था।

+0

** धन्यवाद! ** विंडो क्लास कन्स्ट्रक्टर से पुनर्स्थापित स्थिति कोड को _Loaded_ हैंडलर में मदद करना। मुझे केवल एक चीज जोड़नी चाहिए कि _loaded_ अधिसूचना भेजने से पहले विंडो क्लास _LocationChanged_ अधिसूचना को डिफ़ॉल्ट सेटिंग्स के साथ भेजती है, इसलिए आपको _LocationChanged_ अधिसूचना को तब तक छोड़ना चाहिए जब तक आप _Loaded_ हैंडलर में विंडो स्थिति को पुनर्स्थापित नहीं करते। – Mar

-1

डब्ल्यूपीएफ में: सामान्य में विंडोस्टेट गुण सेट करें (मैक्सिमिक्स्ड नहीं) और ईवेंट लोड करें।

this.Left = SystemParameters.PrimaryScreenWidth + 100; 
this.WindowState = System.Windows.WindowState.Maximized; 
+3

यह मानता है कि द्वितीयक मॉनिटर प्राथमिक के दाईं ओर है। – Paul

32

एक्सटेंशन माध्यमिक की निगरानी करने के लिए किसी विंडो को (यदि वहाँ एक है) विधि: घटना में इस कोड को लिखें। यह नहीं मानता कि द्वितीयक मॉनीटर System.Windows.Forms.Screen.AllScreens [2] है;

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; 
      } 
     } 
    } 
} 
+0

एक आकर्षण की तरह काम करते हैं ... – kennyzx

6

मैं एक जवाब जो लोडेड घटना में स्थिति की स्थापना की वकालत की सूचना है, लेकिन इस झिलमिलाहट का कारण बनता है जब खिड़की पहले सामान्य से पता चला तो अधिकतम है। आप अपने निर्माता में SourceInitialized घटना की सदस्यता और स्थिति वहाँ में यह झिलमिलाहट के बिना माध्यमिक मॉनिटर पर अधिकतम संभाल लेंगे सेट करते हैं - मैं WPF यहाँ यह सोचते हैं रहा हूँ

public MyWindow() 
{ 
    SourceInitialized += MyWindow_SourceInitialized; 
} 

void MyWindow_SourceInitialized(object sender, EventArgs e) 
{ 
    Left = 100; 
    Top = 50; 
    Width = 800; 
    Height = 600; 
    WindowState = WindowState.Maximized; 
} 

किसी भी के लिए विकल्प coords अपने माध्यमिक मॉनिटर

संबंधित मुद्दे