Přidání stránky vlastností (ATL – tutoriál, část 6)
Stránky vlastností jsou implementovány jako samostatné objekty modelu COM, které umožní v případě potřeby sdílet.V tomto kroku bude provádět následující úkoly přidat stránku vlastností ovládacího prvku:
Vytváření prostředku stránky vlastností
Přidání kódu k vytvoření a správě na stránce vlastností
Přidání ovládacího prvku na stránce vlastností
Vytváření prostředku stránky vlastností
Chcete-li přidat stránku vlastností ovládacího prvku, použijte Průvodce přidáním třídy ATL.
Přidat stránku vlastností
V aplikaci Solution Explorer klepněte pravým tlačítkem myši mnohoúhelník.
V místní nabídce klikněte na příkaz Přidat a poté klikněte na tlačítko Přidat třídu.
Vyberte ze seznamu šablon Stránka vlastností ATL a na Přidat.
Jakmile se zobrazí stránka průvodce vlastnost ATL, zadejte PolyProp jako krátké název.
Klepněte na tlačítko řetězce otevřete řetězce stránky a zadejte & mnohoúhelník jako název.
Název vlastnosti stránky je řetězec, který se zobrazí na kartě stránky.Dokumentu řetězec je popis, který používá vlastnost rámeček do stavu linky nebo nástroj tip.Všimněte si, že standardní vlastnosti rámce aktuálně nepoužívá tento řetězec tak, že necháte výchozí obsah.Nebude generovat souboru nápovědy v okamžiku, tak odstranit položku v textovém poli.
Klepněte na tlačítko Dokončit, a bude vytvořen objekt stránky vlastností.
Jsou vytvořeny následující tři soubory:
Soubor |
Description |
---|---|
PolyProp.h |
Obsahuje třídu C++ CPolyProp , který implementuje stránku vlastností. |
PolyProp.cpp |
Obsahuje soubor PolyProp.h. |
PolyProp.rgs |
Skript registru, který registruje objekt stránky vlastností. |
Také jsou provedeny následující změny kódu:
Nové stránky vlastností vkládá položka mapa objektu v Polygon.cpp.
PolyProp Třídy je přidán do souboru Polygon.idl.
Zdroj projektu vkládá nový soubor skriptu registru PolyProp.rgs.
Dialogové okno šablony pole vkládá zdroj projektu stránky vlastností.
Vlastnost řetězce, které jsou určeny jsou přidány k tabulce řetězců prostředků.
Nyní můžete přidáte pole, která chcete zobrazit na stránce vlastností.
Přidat pole na stránce vlastností
V aplikaci Solution Explorer poklepejte na soubor prostředků Polygon.rc.Otevře se zobrazení zdrojů.
V zobrazení zdrojů rozbalte dialogové okno a poklepejte na IDD_POLYPROP.Všimněte si, že se zobrazí se dialogové okno s výjimkou popisek, který nabádá k vložení do ovládacích prvků.
Tento popisek vyberte a změňte jej číst strany: změnou Titulek text Vlastnosti okna.
Velikost popisku pole tak, aby odpovídal velikosti textu.
Přetažením doprava popisku ovládacího prvku pro úpravy z panelu nástrojů.
Nakonec změnit ID ovládacího prvku Edit IDC_SIDES pomocí okna vlastností.
Tím dokončíte proces vytvoření prostředku stránky vlastností.
Přidání kódu k vytvoření a správě na stránce vlastností
Nyní, když jste vytvořili zdroj stránky vlastností, je třeba napsat kód provádění.
Nejprve povolit CPolyProp třídy v objekt nastavit počet stran při použít stisknutí tlačítka.
Chcete-li změnit funkci použít, nastavte počet stran
Nahradit Apply funkce PolyProp.h s 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; }
Stránka vlastností může mít více než jeden klient připojen současně, tak na Apply funkce cyklicky kolem a volá put_Sides na každého klienta s hodnotou načtených z textového pole.Používáte CComQIPtr třída, která provede QueryInterface na každý objekt získat IPolyCtl z rozhraní IUnknown rozhraní (uložené v m_ppUnk matice).
Kód nyní zkontroluje nastavení Sides vlastnost skutečně odpracovaných.Pokud se nezdaří, kód zobrazí okno zobrazující podrobnosti o chybě IErrorInfo rozhraní.Obvykle požádá kontejner pro objekt ISupportErrorInfo rozhraní a volání InterfaceSupportsErrorInfo nejprve zjistit, zda objekt podporuje nastavení informace o chybě.Tento úkol můžete přeskočit.
CComPtr vám pomůže zpracováním automaticky počítání odkazů, takže není třeba volat Release na rozhraní.CComBSTRpomáhá s BSTR zpracování, takže není nutné provést závěrečné SysFreeString volání.Je také použít jeden z různých tříd převodu řetězce tak lze převést BSTR potřeby (to je důvod, proč USES_CONVERSION makro je na začátku funkce).
Musíte také nastavit na stránce vlastností dirty příznak označuje, zda použít by měla být povolena tlačítka.V případě, že uživatel změní hodnotu v strany textové pole.
Tlačítko použít zpracování
V zobrazení třídy CPolyProp tlačítkem a klepněte na tlačítko Vlastnosti v místní nabídce.
V okně Vlastnosti klepněte události ikonu.
Rozbalte IDC_SIDES uzel v seznamu událostí.
Vyberte EN_CHANGE a z rozbalovací nabídky vpravo, klepněte na tlačítko <Add> OnEnChangeSides. OnEnChangeSides Polyprop.h a provádění obslužné rutiny pro Polyprop.cpp bude přidán deklarace obslužné rutiny.
Dále je upravit popisovač.
Chcete-li změnit metodu OnEnChangeSides
Přidejte následující kód v Polyprop.cpp se OnEnChangeSides metody (odstranění jakýkoli kód, který Průvodce umístit tam):
LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { SetDirty(TRUE); return 0; }
OnEnChangeSidesbude volána při WM_COMMAND zpráva je odeslána s EN_CHANGE oznámení IDC_SIDES řízení.OnEnChangeSidespak zavolá SetDirty a předává TRUE označit vlastnost stránky je nyní dirty a použít by měla být povolena tlačítka.
Přidání ovládacího prvku na stránce vlastností
ATL vlastnost stránky průvodce a Průvodce přidáním třídy ATL nepřidávejte stránka vlastností pro ovládací prvek můžete automaticky, protože by mohlo být více ovládacích prvků v projektu.Musíte přidat položku mapování vlastností ovládacího prvku.
Přidat stránku vlastností
Otevřete PolyCtl.h a přidejte tento řádek vlastnosti mapy:
PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
Mapování vlastností ovládacího prvku nyní 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)
// Example entries
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
By jste přidali PROP_PAGE s identifikátorem CLSID vlastností, ale pokud používáte makro PROP_ENTRY makro, jak je znázorněno, Sides hodnota vlastnosti uložena také při uložení ovládacího prvku.
Popis vlastnosti DISPID vlastnosti a identifikátor CLSID stránky vlastností, které má vlastnost jsou tři parametry na makro.To je užitečné, pokud například načíst ovládací prvek do jazyka Visual Basic a nastavte počet stran v době návrhu.Protože počet stran je uložen při načtení projektu aplikace Visual Basic, počet stran obnovena.
Vytvoření a otestování ovládacího prvku
Nyní vytvořit ovládací prvek a vložte ji do kontejneru Test ovládací prvek ActiveX.V kontejneru Test na Upravit nabídky, klepněte na tlačítko Objekt třídy PolyCtl.Zobrazí se stránka vlastností; klepněte Mnohoúhelník kartu.
Použít tlačítko zpočátku je zakázáno.Začněte zadávat hodnoty v strany pole a použít bude povoleno tlačítko.Po dokončení zadávání hodnoty klepněte použít tlačítko.Změny zobrazení ovládacího prvku a použít tlačítko znovu k dispozici.Zkuste zadat neplatnou hodnotu.Zobrazí se okno se zprávou obsahující popis chyby, nastavit z put_Sides funkce.
Dále budou umístěny ovládacího prvku na webové stránce.