2015-10-15 9 views
6

जब हम माउस पर क्लिक करते हैं और एक माउसक्लिक घटना हमारे .NET प्रोग्राम में आग लगती है, तो कंप्यूटर को कैसे पता चलता है कि हमने बटन सीमाओं में दाएं बिंदु पर क्लिक किया है?WinForms ईवेंट में माउस बटन को क्लिक करने पर कैसे क्लिक किया जाता है?

मेरा मतलब है कि हुड के नीचे चल रहा है और यही कारण है कि हम उस को लागू करने की जरूरत नहीं है?

उत्तर

3

मूल रूप से है कि क्या Windows UI framework named User32 आप के लिए करता है। MSDN: Windows and Messages भी देखें।

इस ढांचे दे अपने आवेदन के लिए एक "संदेश पंप" जो विंडोज से संदेश प्राप्त करता लागू करके काम करता है। एक संदेश "माउस सिर्फ इस खिड़की पर ले जाया गया" या "माउस बटन दबाया गया था" हो सकता है। ध्यान दें कि एक "विंडो" एक रूप की भावना में सिर्फ "खिड़की" से अधिक है, एमएसडीएन लिंक को पढ़ना सुनिश्चित करें। एक बटन भी एक खिड़की है।

तो:

  • एक माउस एक हार्डवेयर बस
  • उपयोगकर्ता माउस
  • हार्डवेयर संकेतों सॉफ्टवेयर संकेतों
  • Windows के लिए अनुवाद करा ले जाता है से अधिक पीसी से जुड़ा है संदेशों
  • को इन संकेतों तब्दील
  • विंडोज उपयुक्त आवेदन का संदेश पंप
  • आवेदन करने के लिए इन संदेशों को डिस्पैच इन संदेशों के साथ जो कुछ भी

अब .NET के WinForms आपके लिए इस संदेश पंप को लपेटता है, और संदेशों को उन घटनाओं के रूप में उजागर करता है जिनकी आप सदस्यता ले सकते हैं। आप कार्रवाई में इसे देख सकते हैं overriding WndProc() on your control of coice द्वारा:

protected override void WndProc(ref Message m) 
{ 
    Console.WriteLine(m); 
    base.WndProc(ref m); 
} 

में अधिक गहराई (MSDN: About Messages and Message Queues से), एक Windows संदेश एक खिड़की के लिए (या "नियंत्रण" WinForms संदर्भ में) एक हैंडल का उपयोग जुड़ा हुआ है। यह संभाल अद्वितीय रूप से नियंत्रण की पहचान करता है।

इस तरह WinForms जानता है कि mouse message हैंडल एक्स के साथ उस हैंडल के साथ नियंत्रण वाई के लिए है, इसलिए यह उस संदेश को प्राप्त करने पर माउसक्लिक या संबंधित ईवेंट उठाता है।

+0

उत्तर के लिए धन्यवाद। क्या विंडोज़ में उन सभी संदेश सिस्टम सी भाषा या अन्य भाषा में लिखे गए हैं? – Lyrk

+0

विंडोज संदेश एक भाषा-अज्ञेयवादी, स्मृति स्मृति में हैं। आप अपनी प्रोग्रामिंग भाषा में संदेश प्राप्त करने के लिए User32 लाइब्रेरी को कॉल करते हैं। – CodeCaster

3

माउस स्थिति को ट्रैक करना & राज्य ऑपरेटिंग सिस्टम द्वारा ही संभाला जाता है, वहां इनपुट फ्लैग का एक पूरा समूह होता है जो माउस चाल/क्लिक/इत्यादि के दौरान अनुप्रयोगों को भेजे जाते हैं। एक ही विंडो WM_LBUTTONDOWN और WM_LBUTTONUP ईवेंट जो आप C++ या C अनुप्रयोग (See Here) में उपयोग करेंगे, नेट फ्रेमवर्क द्वारा अवरुद्ध किए गए हैं और क्लिक किए गए ईवेंट में कनवर्ट किए गए हैं जिन्हें हम सभी जानते हैं और प्यार करते हैं। यह सब ढांचे द्वारा स्वयं ही संभाला जाता है, यह स्पष्ट रूप से बताता है कि 'इस विशिष्ट बटन पर उन लोगों को अनुवाद करने के लिए क्या किया गया है' को एक कुशल तरीके से क्लिक किया गया था, लेकिन दिन के अंत में यह वास्तव में अप्रासंगिक है।

आप इसे लागू करने के लिए है क्योंकि नेट फ्रेमवर्क और उसके UI तत्व के डेवलपर्स महसूस किया कि हर कोई एक बटन के लिए है कि कार्यक्षमता को लागू करने की आवश्यकता होगी, और इसलिए हमारे लिए यह किया जरूरत नहीं है।

+0

उत्तर के लिए धन्यवाद। – Lyrk

3

विंडोज संदेश-पासिंग मॉडल का उपयोग करता है। ऑपरेटिंग सिस्टम संदेश भेजने के द्वारा आपकी एप्लिकेशन विंडो के साथ संचार करता है। एक संदेश बस एक संख्यात्मक कोड है जो एक विशेष घटना को निर्दिष्ट करता है। उदाहरण के लिए, यदि उपयोगकर्ता बाएं माउस बटन दबाता है, तो विंडो को निम्न संदेश कोड वाला संदेश प्राप्त होता है।

कुछ संदेशों में उनके साथ जुड़े डेटा हैं। उदाहरण के लिए, WM_LBUTTONDOWN संदेश में माउस कर्सर के एक्स-समन्वय और वाई-समन्वय शामिल हैं।

खिड़की पर एक संदेश पास करने के लिए, ऑपरेटिंग सिस्टम उस विंडो के लिए पंजीकृत विंडो प्रक्रिया को कॉल करता है। (और अब आप जानते हैं कि विंडो प्रक्रिया क्या है।), मोड विवरण के लिए आप इस आलेख को पढ़ सकते हैं, Window Messages

+0

उत्तर के लिए धन्यवाद। – Lyrk

+0

आपका स्वागत है @Lyrk – Adil

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