Přidání stránky vlastností (ATL – tutoriál, část 6)
Poznámka:
Průvodce zprostředkovatelem ATL OLE DB není v sadě Visual Studio 2019 a novější k dispozici.
Stránky vlastností jsou implementovány jako samostatné objekty MODELU COM, které umožňují jejich sdílení v případě potřeby. V tomto kroku provedete následující úlohy a přidáte do ovládacího prvku stránku vlastností:
Vytvoření prostředku stránky vlastností
Přidání kódu pro vytvoření a správu stránky vlastností
Přidání stránky vlastností do ovládacího prvku
Vytvoření prostředku stránky vlastností
Chcete-li do ovládacího prvku přidat stránku vlastností, použijte šablonu stránky vlastností ATL.
Přidání stránky vlastností
V Průzkumník řešení klikněte pravým tlačítkem myši
Polygon
.V místní nabídce klikněte na Přidat>novou položku.
V seznamu šablon vyberte ATL ATL>Property Page a klikněte na Přidat.
Když se zobrazí Průvodce stránkou vlastností ATL, zadejte jako krátký název PolyProp.
Kliknutím na Řetězce otevřete stránku Řetězce a jako název zadejte mnohoúhelník.
Název stránky vlastností je řetězec, který se zobrazí na kartě dané stránky. Řetězec Doc je popis, který rámeček vlastnosti používá k vložení stavového řádku nebo popisku nástroje. Všimněte si, že standardní rámec vlastnosti aktuálně nepoužívá tento řetězec, takže jej můžete ponechat s výchozím obsahem. V tuto chvíli nebudete generovat soubor nápovědy, takže odstraňte položku v daném textovém poli.
Klepněte na tlačítko Dokončit a objekt stránky vlastností bude vytvořen.
Vytvoří se následující tři soubory:
Soubor | Popis |
---|---|
PolyProp.h | Obsahuje třídu CPolyProp C++, která implementuje stránku vlastností. |
PolyProp.cpp | Obsahuje soubor PolyProp.h. |
PolyProp.rgs | Skript registru, který zaregistruje objekt stránky vlastností. |
Provede se také následující změny kódu:
Nová stránka vlastností se přidá do mapy pro zadávání objektů v Polygon.cpp.
Třída
PolyProp
je přidána do souboru Polygon.idl.Nový soubor skriptu registru PolyProp.rgs se přidá do zdroje projektu.
Šablona dialogového okna se přidá do zdroje projektu pro stránku vlastností.
Zadané řetězce vlastností se přidají do tabulky řetězců prostředků.
Teď přidejte pole, která se mají zobrazit na stránce vlastností.
Přidání polí na stránku vlastností
V Průzkumník řešení poklikejte na soubor prostředků Polygon.rc. Tím se otevře zobrazení zdrojů.
V zobrazení zdrojů rozbalte
Dialog
uzel a poklikejte naIDD_POLYPROP
. Všimněte si, že zobrazené dialogové okno je prázdné s výjimkou popisku, který vám řekne, že sem vložíte ovládací prvky.Vyberte tento popisek a změňte ho tak, aby byl přečtený
Sides:
tak, že v okně Vlastnosti změníte text titulku.Změňte velikost pole popisku tak, aby odpovídalo velikosti textu.
Přetáhněte ovládací prvek upravit z panelu nástrojů napravo od popisku.
Nakonec změňte ID ovládacího prvku pro úpravy na
IDC_SIDES
použití okna Vlastnosti .
Tím se dokončí proces vytvoření prostředku stránky vlastností.
Přidání kódu pro vytvoření a správu stránky vlastností
Teď, když jste vytvořili prostředek stránky vlastností, musíte napsat kód implementace.
Nejprve povolte CPolyProp
třídě, aby při stisknutí tlačítka Použít nastavila počet stran v objektu.
Úprava funkce Použít pro nastavení počtu stran
Apply
Funkci v PolyProp.h nahraďte následujícím kódem:STDMETHOD(Apply)(void) { USES_CONVERSION; ATLTRACE(_T("CPolyProp::Apply\n")); for (UINT i = 0; i < m_nObjects; i++) { CComQIPtr<IPolyCtl, &IID_IPolyCtl> pPoly(m_ppUnk[i]); short nSides = (short)GetDlgItemInt(IDC_SIDES); if FAILED(pPoly->put_Sides(nSides)) { CComPtr<IErrorInfo> pError; CComBSTR strError; GetErrorInfo(0, &pError); pError->GetDescription(&strError); MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION); return E_FAIL; } } m_bDirty = FALSE; return S_OK; }
Na stránce vlastností může být současně připojeno více než jeden klient, takže Apply
funkce se smyčuje a volá put_Sides
na každém klientovi s hodnotou načtenou z textového pole. Používáte CComQIPtr třídy, která provádí QueryInterface
na každém objektu IPolyCtl
získat rozhraní z IUnknown
rozhraní (uložené v m_ppUnk
poli).
Kód teď zkontroluje, že nastavení Sides
vlastnosti skutečně fungovalo. Pokud selže, zobrazí se v kódu okno se zprávou s podrobnostmi o chybě z IErrorInfo
rozhraní. Kontejner obvykle požádá objekt o ISupportErrorInfo
rozhraní a nejprve zavolá InterfaceSupportsErrorInfo
, aby určil, zda objekt podporuje nastavení informací o chybě. Tento úkol můžete přeskočit.
CComPtr vám pomůže automaticky zpracovat počítání odkazů, takže nemusíte volat Release
na rozhraní. CComBSTR
vám pomůže se zpracováním BSTR, takže nemusíte provádět konečné SysFreeString
volání. Používáte také jednu z různých tříd převodu řetězců, takže v případě potřeby můžete převést BSTR (to je důvod, proč je makro USES_CONVERSION na začátku funkce).
Musíte také nastavit nezašpiněný příznak stránky vlastností, který indikuje, že by mělo být povolené tlačítko Použít . K tomu dochází, když uživatel změní hodnotu v textovém poli Strany .
Zpracování tlačítka Použít
V zobrazení třídy klepněte pravým tlačítkem myši
CPolyProp
a klepněte na příkaz Vlastnosti v místní nabídce.V okně Vlastnosti klikněte na ikonu Události .
IDC_SIDES
Rozbalte uzel v seznamu událostí.Vyberte
EN_CHANGE
a v rozevírací nabídce vpravo klikněte na <Přidat> OnEnChangeSides. Deklarace obslužné rutiny bude přidánaOnEnChangeSides
do Polyprop.h a implementace obslužné rutiny pro Polyprop.cpp.
Dále upravíte obslužnou rutinu.
Úprava metody OnEnChangeSides
Do metody přidejte následující kód Polyprop.cpp
OnEnChangeSides
(odstraňte veškerý kód, který tam průvodce umístil):LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { SetDirty(TRUE); return 0; }
OnEnChangeSides
bude volána při WM_COMMAND
odeslání zprávy s EN_CHANGE
oznámením IDC_SIDES
pro ovládací prvek. OnEnChangeSides
potom zavolá SetDirty
a předá hodnotu TRUE, aby se označí, že stránka vlastností je teď zašpiněná a tlačítko Použít by mělo být povoleno.
Přidání stránky vlastností do ovládacího prvku
Šablona stránky vlastností ATL a průvodce automaticky nepřidá do ovládacího prvku stránku vlastností, protože v projektu může být více ovládacích prvků. Do mapy vlastností ovládacího prvku budete muset přidat položku.
Přidání stránky vlastností
Otevřete PolyCtl.h a přidejte do mapy vlastností tyto řádky:
PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT) PROP_PAGE(CLSID_PolyProp)
Mapa vlastností ovládacího prvku teď vypadá takto:
BEGIN_PROP_MAP(CPolyCtl)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
#ifndef _WIN32_WCE
PROP_ENTRY_TYPE("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage, VT_UI4)
#endif
PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
PROP_PAGE(CLSID_PolyProp)
// Example entries
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
Mohli jste přidat PROP_PAGE
makro s CLSID stránky vlastností, ale pokud použijete PROP_ENTRY
makro, jak je znázorněno, Sides
hodnota vlastnosti se také uloží při uložení ovládacího prvku.
Tři parametry makra jsou popis vlastnosti, DISPID vlastnosti a CLSID stránky vlastnosti, která má vlastnost. To je užitečné, pokud například načtete ovládací prvek do jazyka Visual Basic a nastavíte počet stran v době návrhu. Vzhledem k tomu, že počet stran je uložen, při opětovném načtení projektu jazyka Visual Basic bude počet stran obnoven.
Sestavení a testování ovládacího prvku
Teď tento ovládací prvek sestavte a vložte ho do testovacího kontejneru ovládacích prvků ActiveX. V testovacím kontejneru v nabídce Upravit klepněte na položku PolyCtl Class Object. Zobrazí se stránka vlastností s informacemi, které jste přidali.
Tlačítko Použít je zpočátku zakázáno. Začněte psát hodnotu do pole Strany a tlačítko Použít se povolí. Po zadání hodnoty klikněte na tlačítko Použít . Ovládací prvek se změní a tlačítko Použít se znovu zakáže. Zkuste zadat neplatnou hodnotu. Zobrazí se okno se zprávou obsahující popis chyby, který jste nastavili z put_Sides
funkce.
V dalším kroku umístíte ovládací prvek na webovou stránku.