2009-02-03 14 views
44

Win32 प्रोग्रामिंग में, विंडो के माता-पिता और खिड़की के मालिक के बीच क्या अंतर है? मैंने सोचा कि मैं यह पता लगा था, तो मैं इस कोड को भर में आया था:Win32 विंडो मालिक बनाम खिड़की अभिभावक?

SetWindowLong(handle, GWL_HWNDPARENT, foo); 

यह वास्तव में खिड़की का मालिक है, न माता पिता सेट - GWL_HWNDPARENT इस्तेमाल किया जा रहा बावजूद। क्या शर्तें पैरेंट/मालिक अदला-बदली हैं, या वास्तव में कोई अंतर है?

उत्तर

17

स्वामी विंडो * नियंत्रण या संवाद के लिए ज़िम्मेदार है (उदाहरण के लिए, खिड़की बनाने/नष्ट करने के लिए ज़िम्मेदार)।

माता-पिता खिड़की श्रृंखला में नियंत्रण या संवाद के लिए अगली-वरिष्ठ खिड़की * है, लेकिन इसके लिए वास्तव में ज़िम्मेदार नहीं है (इसकी ज़िंदगी के बारे में जरूरी नहीं है)। एक खिड़की का माता-पिता भी उसका मालिक हो सकता है।

* विंडो बनाम विंडो: विंडो स्क्रीन पर प्रदर्शित एक वास्तविक विंडो है; खिड़की एक एचडब्ल्यूएनडी के साथ कोई वस्तु है (बटन, पैनल, आदि शामिल हैं)।

+3

खिड़की बनाम विंडो टिप के लिए भी धन्यवाद - कभी-कभी इन चीजों को अन्य लोगों के साथ चर्चा करने की कोशिश करते समय थोड़ा उलझन मिलता है। –

+25

यह सही नहीं है। एक खिड़की में माता-पिता या मालिक हो सकता है लेकिन दोनों नहीं। –

+2

रेमंड, मुझे लगता है कि भ्रम का हिस्सा यह है कि जासूस ++ और गेटएन्स्टर (GA_PARENT) शीर्ष-स्तरीय स्वामित्व वाले एचडब्ल्यूएनडी के लिए भी 'अगली विंडो एक एचडब्ल्यूएनडी पेड़ में एक स्तर ऊपर' वापस कर देगा, इसलिए बोलनेवाली बात करते हुए, उनके पास 'माता-पिता' है, भले ही इसे आंतरिक रूप से ट्रैक न किया जाए। एचडब्ल्यूएनडी पेड़ को देखने के मूल रूप से दो तरीके हैं; निष्क्रिय 'एकल पेड़ डेस्कटॉप पर रूट' देखें कि आप जासूस ++/GetAncestor/EnumChildWindows/GetWindow (GA_FIRST/NEXT) के साथ देखते हैं, और फिर वहां 'आंतरिक-उन्मुख' दृश्य होते हैं, जहां प्रत्येक HWND में एक स्लॉट होता है जो या तो माता-पिता या मालिक निर्भर करता है WS_CHILD पर – BrendanMcK

23

स्वामित्व दो शीर्ष स्तर की खिड़कियों के बीच एक रिश्ता है जबकि माता-पिता शीर्ष स्तर और WS_CHILD, या WS_CHILD और अन्य WS_CHILD के बीच संबंध है।

बटन का पैरेंट वह फॉर्म है जिस पर यह है, जबकि एक संदेश बॉक्स के रूप में दिखाया गया फॉर्म है।

माइक्रोसॉफ्ट Win32 Window Hierarchy and Styles से यह लेख पढ़ें खिड़की रिश्ते बनाने के लिए स्वामित्व, पेरेंटिंग, ZOrder, SetWindowLong, GetWindow और Win32 एपीआई के अन्य सभी बुरा बिट्स की एक बहुत स्पष्ट समझ पाने के लिए।

संपादित करें: ऐसा लगता है कि माइक्रोसॉफ्ट ने उस सामग्री को नीचे ले लिया है, यहां एक और उचित summary of Ownership/Parenting है।

+3

बह, एमएस ने उस सामग्री को नीचे ले लिया है। :( –

+3

http://web.archive.org/web/20100318062734/http://msdn.microsoft.com/en-us/library/ms997562.aspx –

16

रेमंड चेन "A window can have a parent or an owner but not both" बारे में एक लेख लिखा है समझाया।

+0

मजेदार, वह उपरोक्त अपनी टिप्पणियों में उससे लिंक नहीं करता है! :) – mlvljr

0

चेन का ब्लॉग पोस्ट पढ़ने वाला है। मेरे लिए मुख्य बिंदु यह है कि WS_CHILD शैली का उपयोग बाल विंडो पर किया जाना चाहिए। आप एक बच्चे की खिड़की बनाने और पेरेंट हैंडल को CreateWindow() में पास करने का प्रयास कर सकते हैं, लेकिन यदि आपके पास WS_CHILD शैली सेट नहीं है, तो दोनों विंडो के मालिक के रिश्ते होंगे, माता-पिता/बाल संबंध नहीं।

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