Sdílet prostřednictvím


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í

  1. V Průzkumník řešení klikněte pravým tlačítkem myši Polygon.

  2. V místní nabídce klikněte na Přidat>novou položku.

  3. V seznamu šablon vyberte ATL ATL>Property Page a klikněte na Přidat.

  4. Když se zobrazí Průvodce stránkou vlastností ATL, zadejte jako krátký název PolyProp.

  5. 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.

  6. 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 CPolyPropC++, 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í je přidána do objektu vstupní mapa 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í

  1. V Průzkumník řešení poklikejte na soubor prostředků Polygon.rc. Tím se otevře zobrazení zdrojů.

  2. V zobrazení zdrojů rozbalte Dialog uzel a poklikejte na IDD_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.

  3. Vyberte tento popisek a změňte ho tak, aby byl přečtený Sides: tak, že v okně Vlastnosti změníte text titulku.

  4. Změňte velikost pole popisku tak, aby odpovídalo velikosti textu.

  5. Přetáhněte ovládací prvek upravit z panelu nástrojů napravo od popisku.

  6. 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

  1. 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

  1. 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.

  2. V okně Vlastnosti klikněte na ikonu Události .

  3. IDC_SIDES Rozbalte uzel v seznamu událostí.

  4. Vyberte EN_CHANGEa v rozevírací nabídce vpravo klikněte na <Přidat> OnEnChangeSides. Deklarace OnEnChangeSides obslužné rutiny bude přidána do Polyprop.h a implementace obslužné rutiny polyprop.cpp.

Dále upravíte obslužnou rutinu.

Úprava metody OnEnChangeSides

  1. Do metody přidejte následující kód v 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í

  1. 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 technologie ActiveX testovacího kontejneru. 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.

Zpět na krok 5 | : Krok 7

Viz také

Kurz