MFC – ovládací prvky ActiveX: Použití obrázků v ovládacím prvku ActiveX
Tento článek popisuje běžný typ obrázku a způsob jeho implementace v ovládacím prvku technologie ActiveX. Témata:
Přehled vlastností vlastního obrázku
Typ obrázku je jednou ze skupin typů běžných pro některé ovládací prvky technologie ActiveX. Typ obrázku zpracovává metasoubory, rastrové obrázky nebo ikony a umožňuje uživateli zadat obrázek, který se má zobrazit v ovládacím prvku technologie ActiveX. Vlastní vlastnosti obrázku se implementují pomocí objektu obrázku a funkcí Get/Set, které umožňují ovládacímu uživateli přístup k vlastnosti Picture. Pomocí stránky vlastností Stock Picture můžete řídit přístup uživatelů k vlastní vlastnosti Obrázek.
Kromě standardního typu obrázku jsou k dispozici také typy Písmo a barva. Další informace o použití standardního typu písma v ovládacím prvku technologie ActiveX naleznete v článku MFC technologie ActiveX Ovládací prvky: Použití písem.
Třídy ovládacích prvků technologie ActiveX poskytují několik komponent, které můžete použít k implementaci Picture vlastnost v rámci ovládacího prvku. Mezi tyto komponenty patří:
CPictureHolder – třída.
Tato třída poskytuje snadný přístup k objektu a funkcím obrázku pro položku zobrazenou vlastní vlastností Picture.
Podpora vlastností typu LPPICTUREDISP implementovaná pomocí funkcí Get/Set
Pomocí zobrazení tříd můžete rychle přidat vlastní vlastnost nebo vlastnosti, které podporují typ obrázku. Další informace o přidání technologie ActiveX vlastností ovládacího prvku pomocí zobrazení třídy naleznete v článku MFC technologie ActiveX ovládací prvky: Vlastnosti.
Stránka vlastností, která manipuluje s vlastností nebo vlastnostmi ovládacího prvku Obrázek.
Tato stránka vlastností je součástí skupiny stránek skladových vlastností, které jsou k dispozici pro technologie ActiveX ovládací prvky. Další informace o technologie ActiveX stránkách vlastností ovládacího prvku naleznete v článku MFC technologie ActiveX ovládací prvky: Použití stránek vlastností stock
Implementace vlastní vlastnosti obrázku v ovládacím prvku technologie ActiveX
Po dokončení kroků uvedených v této části může ovládací prvek zobrazit obrázky vybrané jeho uživatelem. Uživatel může změnit zobrazený obrázek pomocí stránky vlastností, která zobrazuje aktuální obrázek, a má tlačítko Procházet, které uživateli umožňuje vybrat různé obrázky.
Vlastní vlastnost Picture je implementována pomocí procesu podobného k implementaci jiných vlastností, hlavní rozdíl je, že vlastní vlastnost musí podporovat typ obrázku. Vzhledem k tomu, že položka vlastnosti Picture musí být vykreslena ovládacím prvku technologie ActiveX, musí být do vlastnosti provedeno několik doplňků a úprav, aby bylo možné jej plně implementovat.
Pokud chcete implementovat vlastní vlastnost Picture, musíte provést následující:
Přidejte kód do řídicího projektu.
Je třeba přidat standardní ID stránky vlastností Picture, datový člen typu
CPictureHolder
a vlastní vlastnost typu LPPICTUREDISP s implementací Get/Set.Upravte několik funkcí ve třídě ovládacího prvku.
Tyto změny budou provedeny v několika funkcích, které jsou zodpovědné za kreslení vašeho technologie ActiveX ovládacího prvku.
Přidání do řídicího projektu
Pokud chcete přidat ID stránky vlastností standardní stránky vlastností Obrázek, vložte následující řádek za makro BEGIN_PROPPAGEIDS do souboru implementace ovládacího prvku (. CPP):
PROPPAGEID(CLSID_CPicturePropPage)
Parametr počtu BEGIN_PROPPAGEIDS makra musíte také zvýšit o jeden. Následující řádek ukazuje toto:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
Chcete-li přidat CPictureHolder
datový člen do třídy ovládacího prvku, vložte následující řádek pod chráněný oddíl deklarace třídy ovládacího prvku do souboru záhlaví ovládacího prvku (. H):
CPictureHolder m_pic;
Není nutné pojmenovat svého datového člena m_pic; bude stačit jakýkoliv název.
Dále přidejte vlastní vlastnost, která podporuje typ obrázku:
Přidání vlastní vlastnosti obrázku pomocí Průvodce přidáním vlastnosti
Načtěte projekt ovládacího prvku.
V zobrazení tříd rozbalte uzel knihovny ovládacího prvku.
Kliknutím pravým tlačítkem myši na uzel rozhraní ovládacího prvku (druhý uzel uzlu knihovny) otevřete místní nabídku.
V místní nabídce zvolte Přidat a potom Přidat vlastnost.
Do pole Název vlastnosti zadejte název vlastnosti. V tomto postupu se například
ControlPicture
používá.V poli Typ vlastnosti vyberte IPictureDisp* pro typ vlastnosti.
Pro typ implementace klepněte na tlačítko Get/Set Metody.
Zadejte jedinečné názvy funkcí Get a Set nebo přijměte výchozí názvy. (V tomto příkladu se používají výchozí názvy
GetControlPicture
.SetControlPicture
)Klikněte na Finish (Dokončit).
Průvodce přidáním vlastnosti přidá následující kód mezi komentáře mapy odeslání v záhlaví ovládacího prvku (. H) soubor:
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
Kromě toho byl následující kód vložen do mapy dispečer implementace řízení (. CPP) soubor:
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
Průvodce přidáním vlastnosti také přidá do souboru implementace ovládacího prvku následující dvě funkce zástupných procedur:
IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your dispatch handler code here
return NULL;
}
void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
Poznámka
Názvy tříd ovládacích prvků a funkcí se můžou lišit od výše uvedeného příkladu.
Úpravy řídicího projektu
Po dokončení potřebných doplňků k řídicímu projektu je potřeba upravit několik funkcí, které ovlivňují vykreslování ovládacího prvku technologie ActiveX. Tyto funkce , OnResetState
OnDraw
a Get/Set funkce vlastní Picture vlastnost jsou umístěny v souboru implementace ovládacího prvku. (Všimněte si, že v tomto příkladu je volána CSampleCtrl
třída ovládacího prvku , CPictureHolder
datový člen se nazývá m_pic a vlastní název vlastnosti obrázku je ControlPicture
.)
Do řídicí OnResetState
funkce přidejte následující volitelný řádek za volání COleControl::OnResetState
:
m_pic.CreateEmpty();
m_pic.CreateEmpty();
Tím se obrázek ovládacího prvku nastaví na prázdný obrázek.
Chcete-li obrázek nakreslit správně, proveďte volání CPictureHolder::Render v ovládací OnDraw
funkci. Upravte funkci tak, aby vypadala podobně jako v následujícím příkladu:
void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
if (!pdc)
return;
m_pic.Render(pdc, rcBounds, rcBounds);
}
Ve funkci Get vlastnosti vlastního obrázku ovládacího prvku přidejte následující řádek:
return m_pic.GetPictureDispatch();
return m_pic.GetPictureDispatch();
Do funkce Set vlastní picture vlastnosti ovládacího prvku přidejte následující řádky:
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
Vlastnost obrázku musí být trvalá, aby se informace přidané v době návrhu zobrazovaly za běhu. Do funkce odvozené DoPropExchange
třídy přidejte následující řádekCOleControl
:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
Poznámka
Názvy tříd a funkcí se můžou lišit od výše uvedeného příkladu.
Po dokončení úprav znovu sestavte projekt tak, aby zahrnoval nové funkce vlastní vlastnosti Picture a pomocí testovacího kontejneru otestujte novou vlastnost. Informace o přístupu k testovacímu kontejneru najdete v tématu Testování vlastností a událostí s testovacím kontejnerem .
Viz také
MFC – ovládací prvky ActiveX
MFC – ovládací prvky ActiveX: Použití písem
MFC – ovládací prvky ActiveX: Stránky vlastností