2013-08-25 8 views
5

मैं स्क्रीन पर नियंत्रण की पूर्ण स्थिति प्राप्त करने की कोशिश कर रहा हूं। मैं दो मॉनीटर का उपयोग कर रहा हूं और परिणाम वास्तव में महान नहीं हैं ...सी # स्क्रीन पर नियंत्रण की पूर्ण स्थिति

मैं जो कर रहा हूं वह एक छवि को कैप्चर करने के लिए एक और फॉर्म खोल रहा है, फिर इस छवि को मुख्य रूप में पास कर रहा है और कैप्चर फॉर्म बंद कर रहा है। मैं फिर मुख्य रूप से उसी स्थान पर दिखाना चाहता हूं जहां तस्वीर कैद की गई थी। उदाहरण के तौर पर जो करने की कोशिश कर रहा हूं, उसका एक सारांश प्राप्त करने के लिए, विंडोज़ पर स्निपिंग टूल खोलें और स्निप कैप्चर करें। तब खिड़की उस स्थान पर दिखाई देगी जहां छवि ली गई थी।

Location = new Point(Cursor.Position.X - CaptureBox.Width - CapturePanel.Location.X - CaptureBox.Location.X - 8, Cursor.Position.Y - CaptureBox.Height - CapturePanel.Location.Y - CaptureBox.Location.Y - 30); 

CapturePanel CaptureBox नियंत्रण जो चित्र संग्रहीत करता है शामिल हैं:

यह वर्तमान कोड मैं यह करने के का उपयोग कर रहा है। मैं एक्स की जगह से 8 और टी वाई स्थान से 30 को फॉर्म की सीमा और शीर्षक पट्टी की भरपाई करने के लिए भी ले रहा हूं, लेकिन इसके साथ एकमात्र समस्या यह है कि कुछ कंप्यूटर एक अलग विंडो शैली का उपयोग करेंगे, और ये संख्या बदलेगी।

यदि ऐसी कोई विधि है जिसका उपयोग सीमा और शीर्षक चौड़ाई/खिड़कियों की ऊंचाई को पकड़ने के लिए किया जा सकता है, तो यह बहुत अच्छा होगा।

संपादित

इस के लिए एक समाधान होगा:

Location = new Point(
    Cursor.Position.X - 
    CaptureBox.Width - 
    CapturePanel.Location.X - 
    CaptureBox.Location.X - 
    SystemInformation.HorizontalResizeBorderThickness, 
    Cursor.Position.Y - 
    CaptureBox.Height - 
    CapturePanel.Location.Y - 
    CaptureBox.Location.Y - 
    SystemInformation.CaptionHeight - 
    SystemInformation.VerticalResizeBorderThickness 
); 
से राजा राजा मेरे लिए SystemInformation उनका कहना है मदद से

उत्तर

5

अपने Window caption की Height प्राप्त करने के लिए, तो आप इस कोशिश कर सकते हैं:

int captionHeight = yourForm.PointToScreen(Point.Empty).Y - yourForm.Top;  

प्रपत्र सीमा के Width प्राप्त करने के लिए, तो आप इस कोशिश कर सकते हैं:

int borderWidth = yourForm.PointToScreen(Point.Empty).X - yourForm.Left; 

इसके अलावा, आप कर सकते हैं SystemInformation.CaptionHeight द्वारा डिफ़ॉल्ट कैप्शन ऊंचाई को देखें।

आप स्क्रीन निर्देशांक में CaptureBox के स्थान प्राप्त करना चाहते हैं, तो आप PointToScreen विधि का उपयोग कर सकते हैं:

Point loc = CaptureBox.PointToScreen(Point.Empty); 
+0

पहली विधि काम करता है, SystemInformation.CaptionHeight छोटे की तुलना में यह होना चाहिए था। खिड़की सीमा के आकार के बारे में क्या? – Dragonphase

+0

@ ड्रैगनफ़ेस यदि आप 'कैप्चरबॉक्स' का स्थान प्राप्त करना चाहते हैं, तो मेरा अद्यतन उत्तर देखें, 'सीमा आकार' की गणना करने की आवश्यकता नहीं है। –

+0

यह काम नहीं करेगा, क्योंकि मैं मुख्य रूप से कैप्चर की गई छवि का स्थान नहीं पारित कर रहा हूं। यदि मैं ऐसा करता हूं, तो इसका परिणाम पूर्ण स्थिति में होता है (उदाहरण के लिए, 1440) प्राथमिक मॉनिटर पर वर्तमान में चयनित फ़ॉर्म के स्थान में जोड़ा जा रहा है। हालांकि, मैं अपने मुख्य पोस्ट में एक समाधान के साथ आया था। – Dragonphase

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