2012-09-05 10 views
7

Win32 कार्यक्रमों को आम तौर पर एक संदेश पाश कि छोरों GetMessage या बुला PeekMessage है और इसके बाद संबंधित खिड़की की खिड़की प्रक्रिया को संदेश प्रेषण करने के लिए DispatchMessage कहता है।Win32 प्रोग्राम में DispatchMessage को कॉल करना आवश्यक है?

लेकिन वहाँ वास्तव में यह करने के लिए किसी भी आवश्यकता है? मैं बजाय सिर्फ संदेश पाश में सीधे एमएसजी वस्तु में देख सकते हैं और DispatchMessage बुला के बिना कार्रवाई वहाँ की जरूरत प्रदर्शन कर सकते हैं? मैं उन मामलों के बारे में बात कर रहा हूं जहां मेरे पास एक और खिड़की है जिसमें कोई अन्य विंडो नियंत्रण नहीं है, उदाहरण के लिए यदि विंडो केवल डायरेक्ट 3 डी डिस्प्ले विंडो के रूप में उपयोग की जाती है, तो संदेश हमेशा एकमात्र विंडो पर निर्देशित किए जाएंगे।

ज्यादातर मैं बस उत्सुक हूँ, लेकिन यह भी कि यह मेरे कोड क्लीनर भी किया जा रहा है के कुछ पहलुओं को जन्म दे सकता है।

उत्तर

12

आप DispatchMessage फोन संदेश अपने 'खिड़की proc "करने के लिए, उचित खिड़की पर प्राप्त करना। आपको लगता है कि आपके पास केवल एक खिड़की है, लेकिन क्या यह वास्तव में केवल एक है? COM सहायक खिड़कियां बनाएगा, अन्य उपप्रणाली सहायक छिपी हुई खिड़कियां भी बना सकती हैं, जो साझा संदेश कतार में पोस्ट किए गए संदेश वितरित करने जा रही हैं और उन विंडो को संबोधित कर रही हैं। इन विवरणों के बारे में बहुत कुछ सोचने के बिना आपके पास उन्हें भेजने के लिए एपीआई है। और आपको ऐसा करना है क्योंकि वे उपप्रणाली संदेश पंप की उपस्थिति पर निर्भर हैं।

Spy++ विंडोज एसडीके उपकरण देखकर कितने खिड़कियों तुम सच है के साथ मदद कर सकता है।

फिर भी अगर आप वास्तव में केवल खिड़की है, यह बहुत अधिक अंतर नहीं पड़ता है कि क्या आप हैंडलर DispatchMessage internals से, या सीधे अपने संदेश पंप द्वारा कहा जाता है।

+0

यह समझ में आता है, धन्यवाद! – jcoder

+1

'डिस्पैच मैसेज' और 'कॉलविंडोप्रोक' विंडोज हुक पर विचार करने जैसी चीजें भी करते हैं। यहां तक ​​कि एक खिड़की के साथ आपको उनका उपयोग करने की ज़रूरत है। मेरा मानना ​​है कि कुछ संदेशों को 'डिस्पैच मैसेज' के बाहर सही ढंग से संसाधित नहीं किया जा सकता है लेकिन मेरे पास मेरे सिर के ऊपर से कोई उदाहरण नहीं है। शायद 'WM_PAINT' जैसी चीजें। – tenfour

+1

@tenfour, शायद यह कहने के लिए और अधिक सही है कि कुछ संदेशों को विंडोप्रोक के माध्यम से भी बुलाया जाएगा, और कतार पर अलग संदेश के रूप में मौजूद नहीं होगा। तो, किसी भी मामले में विंडोप्रोक जरूरी है। अभी भी कतार पर पोस्ट किए गए दोनों तरीकों को संभाला जा सकता है। मैं कारणों के बारे में नहीं सोच सकता कि क्यों वे पंप पक्ष पर उन्हें संभालना चाहते हैं। –

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