Šta je novo?

ActiveX plugin za IE

  • Začetnik teme Začetnik teme yooyo
  • Datum pokretanja Datum pokretanja

yooyo

Čuven
VIP član
Učlanjen(a)
28.06.2005
Poruke
10,877
Poena
730
Moja oprema  
Pristup internetu
  1. Optički internet
Treba da napravim jedan IE plugin tj. nesto sto ce se embedovati na web starnu i iscrtavati neka cuda. Vec sam napravio za Firefox i sada treba da portujem na IE.

Dakle... objekat se u web stranu ubacuje na sledeci nacin:
Kod:
<OBJECT ID="CWebPlayer" CLASSID="CLSID:FF8885E7-5077-4A9A-894E-E7B6C9548C4D" width=800 height=600>
    <param name="data" value="file:///C:/temp/teki-test-file.ppp" />
</OBJECT>

Problem je sto ne znam kako da handlujem data parametar u C++ activex projektu. Prevrnuo sam MSDN uzduz i popreko, prevrnuo internet trazeci neki ljudski tutorial kako izbaciti AX na web stranu i kako pokupiti parametre i nisam uspeo da nadjem ono sto mi treba.

Ako neko ima C++ tutorial kako napraviti ax kontrolu za IE i da pritom mogu da pristupim custom parametrima zamolio bih ga da nesto napise o tome. I jos nesto.. kada za potrebe firefox-a koristim <EMBED> dat i u njemu parametar src firefox automatski otvara URL iz src parametra i prosledjuje stream pluginu. Kako radi IE? Da li plugin mora da otvara konekcije i vuce podatke ili ce IE to da odradi i da prosledi stream pluginu.
 
Provalio sam...
1. Napraviti ATL projekat
2. Dodati ATL kontrolu
3. Ubaciti u osnovne klase public IPersistPropertyBagImpl<CCIEWebPlayer>,
4. Ubaciti COM_INTERFACE_ENTRY(IPersistPropertyBag) u BEGIN_COM_MAP
5. override STDMETHOD(Load)(LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog);
6. ubaciti sledecu metodu
Kod:
STDMETHODIMP CYourClassName::Load(LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog)
{
	m_PluginParams.clear();
	CComQIPtr<IPropertyBag2> cpPropBag2 = pPropBag;
	if (cpPropBag2)
	{
		// Read *all* the properties via IPropertyBag2 and store them somewhere
		// so they can be fed into the plugin instance at creation..
		ULONG nProperties;
		cpPropBag2->CountProperties(&nProperties);
		if (nProperties > 0)
		{
			PROPBAG2 *pProperties = (PROPBAG2 *) malloc(sizeof(PROPBAG2) * nProperties);
			ULONG nPropertiesGotten = 0;
			cpPropBag2->GetPropertyInfo(0, nProperties, pProperties, &nPropertiesGotten);
			for (ULONG i = 0; i < nPropertiesGotten; i++)
			{
				if (pProperties[i].vt == VT_BSTR)
				{
					USES_CONVERSION;
					CComVariant v;
					HRESULT hrRead;
					cpPropBag2->Read(1, &pProperties[i], NULL, &v, &hrRead);
					// implementirati sledeci poziv      
					AddPluginParam(pProperties[i].pstrName, v.bstrVal);
				}
				if (pProperties[i].pstrName)
				{
					CoTaskMemFree(pProperties[i].pstrName);
				}
			}
			free(pProperties);
		}
	}
	return IPersistPropertyBagImpl<CYourClassName>::Load(pPropBag, pErrorLog);
} 

HRESULT CYourClassName::AddPluginParam(const TCHAR *szName, const TCHAR *szValue)
{
... obraditi parametre
}
 
Nazad
Vrh Dno