Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anpassade egenskaper skiljer sig från lageregenskaper eftersom anpassade egenskaper inte redan implementeras av COleControl klassen. En anpassad egenskap används för att exponera ett visst tillstånd eller utseende för en ActiveX-kontroll för en programmerare med hjälp av kontrollen.
Den här artikeln beskriver hur du lägger till en anpassad egenskap i ActiveX-kontrollen med hjälp av guiden Lägg till egenskap och förklarar de resulterande kodändringarna. Ämnena omfattar:
Använda guiden Lägg till egenskap för att lägga till en anpassad egenskap
Lägg till ändringar i egenskapsguiden för anpassade egenskaper
Anpassade egenskaper finns i fyra typer av implementering: Medlemsvariabel, Medlemsvariabel med meddelande, Get/Set-metoder och Parametriserad.
Implementering av medlemsvariabel
Den här implementeringen representerar egenskapens tillstånd som en medlemsvariabel i kontrollklassen. Använd implementeringen av medlemsvariabeln när det inte är viktigt att veta när egenskapsvärdet ändras. Av de tre typerna skapar den här implementeringen minst stödkod för egenskapen. Makroet för dispatch-karta för implementering av medlemsvariabler är DISP_PROPERTY.
Medlemsvariabel med meddelandeimplementering
Den här implementeringen består av en medlemsvariabel och en meddelandefunktion som skapats av guiden Lägg till egenskap. Meddelandefunktionen anropas automatiskt av ramverket när egenskapsvärdet har ändrats. Använd medlemsvariabeln med meddelandeimplementeringen när du behöver meddelas när ett egenskapsvärde har ändrats. Den här implementeringen kräver mer tid eftersom det kräver ett funktionsanrop. Makrot för postkartan för den här implementeringen är DISP_PROPERTY_NOTIFY.
Implementering av get/set-metoder
Den här implementeringen består av ett par medlemsfunktioner i kontrollklassen. Implementeringen Get/Set Methods anropar automatiskt funktionen Hämta medlem när kontrollens användare begär det aktuella värdet för egenskapen och funktionen Ange medlem när kontrollens användare begär att egenskapen ska ändras. Använd den här implementeringen när du behöver beräkna värdet för en egenskap under körningstiden, verifiera ett värde som skickas av kontrollens användare innan du ändrar den faktiska egenskapen eller implementerar en skrivskyddad egenskapstyp. Makropost för sändningskartan i den här implementeringen är DISP_PROPERTY_EX. I följande avsnitt använder guiden Lägg till egenskap för att lägga till en anpassad egenskap den anpassade egenskapen CircleOffset för att demonstrera den här implementeringen.
Parameteriserad implementering
Parameteriserad implementering stöds av guiden Lägg till egenskap. En parameteriserad egenskap (kallas ibland en egenskapsmatris) kan användas för att komma åt en uppsättning värden via en enda egenskap för din kontroll. Makroet för inmatning i postkartan för den här implementeringen är DISP_PROPERTY_PARAM. Mer information om hur du implementerar den här typen finns i Implementera en parameteriserad egenskap i artikeln ActiveX Controls: Advanced Topics( ActiveX Controls: Advanced Topics).
Använda guiden Lägg till egenskap för att lägga till en anpassad egenskap
Följande procedur visar hur du lägger till en anpassad egenskap, CircleOffset, som använder implementeringen Get/Set Methods. Med den anpassade egenskapen CircleOffset kan kontrollens användare förskjuta cirkeln från mitten av kontrollens rektangel för avgränsning. Proceduren för att lägga till anpassade egenskaper med en annan implementering än Get/Set-metoder är mycket lik.
Samma procedur kan också användas för att lägga till andra anpassade egenskaper som du vill använda. Ersätt egenskapsnamnet CircleOffset och parametrarna med ditt anpassade egenskapsnamn.
Så här lägger du till den anpassade egenskapen CircleOffset med hjälp av guiden Lägg till egenskap
Läs in kontrollens projekt.
I Klassvy expanderar du biblioteksnoden för din kontroll.
Högerklicka på gränssnittsnoden för kontrollen (biblioteksnodens andra nod) för att öppna snabbmenyn.
På snabbmenyn klickar du på Lägg till och sedan på Lägg till egenskap.
Då öppnas guiden Lägg till egenskap.
I rutan Egenskapsnamn skriver du CircleOffset.
För Implementeringstyp klickar du på Hämta/ange metoder.
I rutan Egenskapstyp väljer du
short.Ange unika namn för get- och set-funktionerna eller acceptera standardnamnen.
Klicka på Finish.
Lägg till ändringar i inställningsguiden för anpassade egenskaper
När du lägger till den anpassade egenskapen CircleOffset gör guiden Lägg till egenskap ändringar i rubriken (. H) och implementeringen (. CPP)-filer för kontrollklassen.
Följande rader läggs till i . H-fil för att deklarera två funktioner som heter GetCircleOffset och SetCircleOffset:
SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);
Följande rad läggs till i kontrollens . IDL-fil:
[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;
Den här raden tilldelar egenskapen CircleOffset ett specifikt ID-nummer som hämtats från metodens position i listan metoder och egenskaper i guiden Lägg till egenskap.
Dessutom läggs följande rad till i sändningskartan (i . CPP-filen för kontrollklassen) för att mappa egenskapen CircleOffset till kontrollens två hanteringsfunktioner:
DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)
Slutligen läggs implementeringarna av GetCircleOffset funktionerna och SetCircleOffset till i slutet av kontrollens . CPP-fil. I de flesta fall ändrar du funktionen "Get" för att returnera värdet för egenskapen. Funktionen Set innehåller vanligtvis kod som ska köras antingen före eller efter att egenskapen ändras.
void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
Observera att guiden Lägg till egenskap automatiskt lägger till ett anrop till SetModifiedFlag i funktionen Sets kropp. Om du anropar den här funktionen markeras kontrollen som ändrad. Om en kontroll har ändrats sparas dess nya tillstånd när containern sparas. Den här funktionen ska anropas när en egenskap, som sparas som en del av kontrollens beständiga tillstånd, ändrar värde.
Se även
MFC ActiveX-kontroller
MFC ActiveX-kontroller: Egenskaper
MFC ActiveX-kontroller: Metoder
COleControl-klass