हम डब्ल्यूपीएफ में एक लेआउट मैनेजर विकसित कर रहे हैं जिसमें व्यूपोर्ट्स हैं जिन्हें उपयोगकर्ता द्वारा स्थानांतरित/आकार/आदि किया जा सकता है। व्यूपोर्ट आम तौर पर लेआउट मैनेजर में हमारे नियंत्रण में मौजूद प्रदाताओं के माध्यम से डेटा (चित्र/फिल्में/आदि) से भरे जाते हैं। मेरा काम यह जांचना है कि व्यूपोर्ट में किसी भी बाहरी विंडोज ऐप (यानी नोटपैड, कैल्क, एडोब रीडर, आदि) को होस्ट करना संभव है या नहीं। मुझे कई समस्याएं आती हैं।डब्ल्यूपीएफ विंडो में बाहरी ऐप होस्टिंग
अधिकांश संसाधन HwndHost क्लास का उपयोग करने के लिए इंगित करते हैं। मैं माइक्रोसॉफ्ट से इस walkthrough के साथ प्रयोग कर रहा हूँ: http://msdn.microsoft.com/en-us/library/ms752055.aspx
मैंने इसे अनुकूलित किया है ताकि सूची बॉक्स को बाहरी एप्लिकेशन से विंडोज हैंडल के साथ बदल दिया गया हो। किसी को भी मेरी मदद कर सकते हैं इन सवालों के साथ:
- पूर्वाभ्यास एक अतिरिक्त स्थिर उप खिड़की जिसमें
ListBox
रखा गया है कहते हैं। मुझे नहीं लगता कि मुझे बाहरी ऐप्स के लिए इसकी आवश्यकता है। अगर मैं इसे छोड़ देता हूं, तो मुझे बाहरी ऐप को एक बाल विंडो बनाना होगा (उपयोगकर्ता 32.dll से Get/SetWindowLong का उपयोगGWL_STYLE
कोWS_CHILD
के रूप में सेट करना होगा)। लेकिन अगर मैं ऐसा करता हूं, तो ऐप का मेनू बार गायब हो जाता है (WS_CHILD
शैली की वजह से) और अब यह इनपुट प्राप्त नहीं करता है। - यदि मैं उप विंडो का उपयोग करता हूं, और बाहरी ऐप को उस चीज का बच्चा उचित रूप से काम करता है, लेकिन कभी-कभी बाहरी ऐप ठीक से पेंट नहीं करता है।
- इसके अलावा, मुझे व्यूपोर्ट में आकार बदलने के लिए बाल विंडो की आवश्यकता है। क्या यह संभव है?
- जब बाहरी ऐप एक बच्चे की खिड़की (यानी नोटपैड-> सहायता-> के बारे में) उत्पन्न करता है, तो यह विंडो
HwndHost
द्वारा होस्ट नहीं की जाती है (और इस प्रकार व्यूपोर्ट के बाहर ले जाया जा सकता है)। क्या कोई रास्ता है जिससे मैं इसे रोक सकता हूं? - चूंकि मुझे बाहरी एप्लिकेशन और लेआउट मैनेजर के बीच कोई और बातचीत की आवश्यकता नहीं है, क्या मुझे लगता है कि मुझे संदेशों को पकड़ने और अग्रेषित करने की आवश्यकता नहीं है? (सूची बॉक्स में चयन परिवर्तनों को पकड़ने के लिए walkthrough उप विंडो में एक HwndSourceHook जोड़ता है)।
- जब आप (अनमोडिफाइड) उदाहरण VS2010 चलाते हैं और विंडो बंद करते हैं, तो VS2010 यह नहीं देखता कि प्रोग्राम समाप्त हो गया है। यदि आप सभी को तोड़ते हैं, तो आप स्रोत के बिना असेंबली में समाप्त होते हैं। कुछ गंध चल रही है, लेकिन मुझे यह नहीं मिल रहा है।
- walkthrough खुद को बहुत ही गड़बड़ लगता है, लेकिन मुझे इस विषय पर कोई बेहतर दस्तावेज नहीं मिला है। कोई अन्य उदाहरण?
- एक अन्य दृष्टिकोण
HwndHost
का उपयोग नहीं करना है, लेकिनWindowsFormHost
पर चर्चा के रूप में here पर चर्चा की गई है। यह काम करता है (और बहुत आसान है!) लेकिन मेरे पास आवेदन के आकार पर नियंत्रण नहीं है? इसके अलावा, WinFormHost वास्तव में इसके लिए वास्तव में नहीं है?
सही दिशा में किसी भी पॉइंटर्स के लिए धन्यवाद।
हाय, मैं निश्चित रूप से बिंदु 8. –