2011-11-25 8 views
5

में एम्बेडेड वेब नियंत्रण के लिए छवि डेटा कैसे प्रदान करें मेरे सी ++ ऐप में मैं एक वेब ब्राउज़र (इंटरनेट एक्सप्लोरर) नियंत्रण (CLSID_WebBrowser) एम्बेड कर रहा हूं (COM के माध्यम से)।सी ++

मैं IHTMLDocument2 :: लिखने() विधि का उपयोग कर उस नियंत्रण में अपना स्वयं का HTML प्रदर्शित कर सकता हूं लेकिन यदि HTML में <img src="foo.png"> तत्व है, तो यह प्रदर्शित नहीं होता है।

मुझे लगता है कि किसी भी तरह से वेब नियंत्रण में foo.png के लिए डेटा प्रदान करने का एक तरीका है, लेकिन मुझे इस कार्यक्षमता को हुक करने के लिए सही जगह नहीं मिल रही है?

मुझे foo.png की सामग्री प्रदान करने के पूर्ण नियंत्रण में होना चाहिए, इसलिए कार्य-आस-पास जैसे res: // प्रोटोकॉल या डिस्क पर सहेजने और फ़ाइल का उपयोग करना: // प्रोटोकॉल पर्याप्त नहीं है। मैं बस अपने कोड को किसी भी तरह प्लग करना चाहता हूं ताकि जब एम्बेडेड CLSID_WebBrowser नियंत्रण IHTMLDocument2 :: लिखें() के साथ दिए गए HTML डेटा में <img src="foo.png"> देखता है तो यह मुझे यह डेटा प्रदान करने के लिए कहेंगे।

उत्तर

3

अपने ही सवाल का जवाब करने के लिए, समाधान है कि अंत में मेरे लिए काम किया है:

  1. रजिस्टर कस्टम IInternetProtocol/IInternetProtocolInfo/IInternetSession को दिया कस्टम IClassFactory के माध्यम से :: RegisterNameSpace()। मेरे लिए एक बग की तरह प्रतीत होने वाले कारणों के लिए, इसे पहले से ही आईई (जिसे मैंने "इसके" चुना है) के लिए जाना जाने वाला प्रोटोकॉल होना चाहिए, भले ही यह मेरा खुद का, अद्वितीय नामस्थान होगा। IPersistentMoniker :: लोड के माध्यम से कस्टम IMoniker के माध्यम से

  2. फ़ीड एचटीएमएल डेटा() और यह सुनिश्चित करें कि IMoniker :: GetDisplayName() (जो करने के लिए जो प्रदान की html में संबंधित लिंक्स का समाधान हो जाएगा अनुसार एक आधार यूआरएल है) कि प्रोटोकॉल के साथ शुरू होता है बनाने के योजना (मेरे मामले में "इसकी: //")। इस तरह से एचटीएमएल डेटा में सापेक्ष लिंक "foo.png" होगा: //foo.png आईई में होगा जो urlmon कॉल IInternetProtocol :: Start() और IInternetProtocol :: Read() उस यूआरएल के डेटा के लिए पूछने के लिए करेगा ।

यह सब नहीं बल्कि जटिल है, आप वास्तविक (BSD लाइसेंस प्राप्त) कोड यहाँ देख सकते हैं: http://code.google.com/p/sumatrapdf/source/browse/trunk/src/utils/HtmlWindow.cpp

0

आप एक छोटे से वेबसर्वर जैसे मोंगोस को एम्बेड कर सकते हैं और वहां से उन लोगों को संदर्भित कर सकते हैं।

मोंगोज़ में, आप विशिष्ट पथ पर कॉलबैक संलग्न कर सकते हैं, इस प्रकार सी ++ कोड से छवियों को वापस कर सकते हैं।

हम अपने डीबगिंग टूल है, जहां प्रत्येक छवियों एक वेब इंटरफेस

+0

एक संभावना है कि लेकिन मैं आशा करती हूं कि वहाँ एक सरल समाधान है कि केवल के साथ बातचीत शामिल है सीधे वेब नियंत्रण। –

0

सबसे आसान समाधान एक Data URI होगा से पहुँचा जा सकता है के लिए इस का उपयोग करें। आप सीधे छवि को IHTMLDocument2::write() से इनलाइन कर देंगे।

+0

यह भी एक संभावना है, लेकिन एचटीएमएल वास्तव में मेरे द्वारा उत्पन्न नहीं होता है और मौजूदा एचटीएमएल में डेटा के साथ आईएमजी लिंक को प्रतिस्थापित करना आसान नहीं है –