2009-11-29 14 views
9

क्या आपके मुख्य संदेश हैंडलर द्वारा पकड़े जाने के लिए Win32 में कस्टम संदेश प्रकारों को परिभाषित और भेजने का कोई तरीका है? उदाहरण के लिए, मेरा मुख्य संदेश हैंडलर WM_PAINT, WM_RESIZE, WM_LBUTTONDOWN आदि जैसे संदेशों को कैप्चर करता है। क्या मैं अपना स्वयं का WM_DOSOMETHING बना सकता हूं? यदि हां, तो मैं यह संदेश कैसे भेजूं?win32 में कस्टम संदेश प्रकार बनाना?

आह, मुझे वास्तव में पता चला कि यह here से पहले पूछा गया था, हालांकि, यह जवाब नहीं देता कि मैं वास्तव में यह संदेश कैसे भेजूंगा।

उत्तर

13

हां। बस WM_USER रेंज में निरंतर घोषित करें उदा।

#define WM_RETICULATE_SPLINES (WM_USER + 0x0001) 

आप RegisterWindowMessage API का उपयोग कर नाम से एक संदेश भी पंजीकृत कर सकते हैं।

फिर आप SendMessage, PostMessage या उनके किसी भी प्रकार का उपयोग करके इन संदेशों को भेज सकते हैं।

+0

धन्यवाद के साथ अपना स्वयं का वैश्विक संदेश पंजीकृत करें! क्या रजिस्टर WindowMessage() को जरूरी है यदि संदेश भेजा जा रहा है और केवल एक आवेदन के भीतर कब्जा कर लिया गया है? – BeeBand

+3

यदि #define का उपयोग कर रहे हैं, तो (WM_USER + 0x0001) के आसपास कोष्ठक का उपयोग करना सुनिश्चित करें, इसलिए अंकगणित आपके नए संदेश संख्या (बिटवाई ऑपरेशंस, उच्च-आदेश शब्द में पैकिंग आदि) पर सही ढंग से कार्य करता है। – Travis

+1

और नहीं, यदि आपको केवल एक ही एप्लिकेशन शामिल है तो आपको RegisterWindowMessage की आवश्यकता नहीं है; केवल अगर आपको एक ही संदेश संख्या पर सहमत होने के लिए दो ऐप्स की आवश्यकता है। – Travis

13

ओह, चलो बस बंद करो और यहाँ लगता है ...

सबसे पहले, विंडोज ही WM_USER+n रेंज में संदेश भेजता है, यही कारण है कि WM_APP आविष्कार किया गया था (मैं इस कठिन रास्ता मिल गया) है। लेकिन यह बदतर हो जाता है ... बुरी तरह से व्यवहार किए गए अनुप्रयोगों को रोकने के लिए कुछ भी नहीं है प्रसारणWM_USER+n या WM_APP+n संदेश, और क्योंकि मनुष्यों ने देवताओं से अनंत मूर्खता के क्रिस्टल चुरा लिया, यह वास्तव में असली दुनिया में होता है।

तो, मेरे बाद दोहराएं, केवल एकमात्र सुरक्षित संदेश है जिसे मैं स्वयं परिभाषित करता हूं और केवल खुद को देख सकता हूं। RegisterWindowMessage का उपयोग करें। और फिर भी, अविश्वसनीय रहो। जब मुझे RegisterWindowMessage को परिभाषित करने के लिए स्ट्रिंग की आवश्यकता होती है, तो मैं स्ट्रिंग बनाने के लिए GUIDGEN का उपयोग करता हूं और परिणामस्वरूप gobbledygook पर मानव-पठनीय ऐप-विशिष्ट उपसर्ग डालता हूं ताकि कोड में एकाधिक संदेशों को अलग करने में मेरी सहायता हो सके।

अपने साथी इंसानों की मूर्खता पर शर्त - यह हमेशा जीतने वाली शर्त है।

यदि आप इस पूरे विषय पर आधिकारिक पृष्ठभूमि चाहते हैं, तो here देखें। नहीं, यह मेरी वेबसाइट नहीं है, यह जो न्यूकॉमर्स है।

+0

"क्योंकि मनुष्यों ने ईश्वरों से अनंत मूर्खता के क्रिस्टल को चुरा लिया" बेवकूफ देवताओं की तुलना में बेहतर बेवकूफ इंसान, हालांकि;) – Ben

1
  • आप विंडो वर्ग बनाई गई हैं, तो आप अगर यह आपकी वर्ग नहीं है WM_USER रेंज (या WM_APP)
  • उपयोग करते हैं, आप WM_APP
  • उपयोग कर सकते हैं कर सकते हैं आप के लिए संदेश प्रसारित करना चाहते हैं प्रत्येक शीर्ष स्तरीय विंडो, रजिस्टरविंडो मैसेज
संबंधित मुद्दे