Pages de propriétés sont implémentées comme des objets COM distincts, qui permettent aux pages de propriétés être partagée si nécessaire. Pour ajouter une page de propriétés à votre contrôle, vous pouvez utiliser l'Assistant objet ATL.
Démarrez l'Assistant objet ATL et sélectionnez contrôles comme la catégorie sur la gauche. Sélectionnez la Page de propriétés à droite, puis cliquez sur suivant.
Encore une fois, vous obtenez la boîte de dialogue vous permettant d'entrer le nom du nouvel objet. Appelez l'objet PolyProp en tant et entrez ce nom dans la zone d'édition Nom court.

Notez que la zone d'édition Interface est grisée. C'est parce qu'une page de propriétés n'a pas besoin d'une interface personnalisée.
Cliquez sur l'onglet ch&aînes pour définir le titre de la page de propriétés. Le titre de la page de propriétés est la chaîne qui s'affiche dans l'onglet de la page. Tapez amp ;Polygone dans le titre. La Chaîne Doc est une description qu'un cadre de propriété utilise pour mettre dans un embout de ligne ou outil de statut. Notez que le cadre de la propriété standard actuellement n'utilise pas cette chaîne, mais vous pouvez lui affecter de toute façon. Vous n'allez pas à générer un fichier d'aide en ce moment, donc effacer l'entrée dans cette zone de texte. Cliquez sur OK et la propriété objet page sera créée.

Les trois fichiers suivants sont créés.:
| Fichier | Description |
| PolyProp.h | Contient la classe C++ CPolyProp , qui implémente la page de propriétés. |
| PolyProp.cpp | Comprend le fichier PolyProp.h. |
| PolyProp.rgs | Le script de Registre qui enregistre l'objet page de propriété. |
Les modifications de code suivantes sont également faites:
PolyProp classe est ajoutée dans le fichier Polygon.idl.
Ajoutez maintenant les champs que vous voulez faire apparaître sur la page de propriétés. Notez que, dans Polygon.rc, la boîte de dialogue est vide sauf pour une étiquette qui indique d'insérer vos commandes ici. Supprimer cette étiquette et en ajouter un qui contient le texte « côtés: ". À côté de l'étiquette ajouter une zone d'édition et de lui donner une ID deIDC_SIDES.

Inclure Polygon.h en haut du fichier PolyProp.h:
# i&nclude "Polygon.h"nbsp ; / / définition des IPolyCtl
Maintenant activer la CPolyProp classe pour définir le nombre de côtés à votre objet pressé le bouton appliquer . Changement du Apply fonction PolyProp.h comme suit.
STDMETHOD(Apply)(void)
{
USES_CONVERSION ;
ATLTRACE(_T("CPolyProp::Apply\n")) ;
pour (UINT I = 0; i lt ; m_nObjects; i ++)
{
CComQIPtr < IPolyCtl & IID_IPolyCtl > pPoly(m_ppUnk[i]) ;
court nSides = (short)GetDlgItemInt(IDC_SIDES) ;
Si échec (pPoly - > put_Sides(nSides))
{
PError CComPtr <IErrorInfo> ;
CComBSTR strError ;
GetErrorInfo (0, & pError) ;
pError - > GetDescription(&strError) ;
MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION) ;
retour E_FAIL ;
}
}
m_bDirty = FALSE ;
return S_OK ;
}
Une page de propriété pourrait avoir plus d'un client qui y est attaché à un moment, donc la Apply fonction autour d'une boucle et appelle put_Sides sur chaque client avec la valeur Récupérée de la zone d'édition. Vous utilisez la classe CComQIPtr qui exécute QueryInterface sur chaque objet pour obtenir la IPolyCtl interface de l' IUnknown (stocké dans le m_ppUnk tableau).
Le code vérifie maintenant qu'en définissant la propriété côtés réellement effectuée. Si elle échoue, le code affiche une boîte de message affiche les détails de l'erreur de l'interface IErrorInfo . Typiquement, un conteneur demande un objet pour l'interface ISupportErrorInfo et appelle InterfaceSupportsErrorInfo en premier lieu, afin de déterminer si l'objet prend en charge les informations d'erreur de paramètre. Mais puisqu'il s'agit de votre contrôle, vous pouvez renoncer à cette vérification.
CComPtr vous aide en gérant automatiquement le décompte des références, donc pas besoin d'appeler Release sur l'interface. CComBSTR vous aide avec le traitement BSTR , donc vous n'avez pas à effectuer l'appel final de SysFreeString . Vous aussi utiliser les différentes classes de conversion de chaîne, donc vous pouvez convertir le BSTR si nécessaire (c'est pourquoi nous ajoutons la macro USES_CONVERSION au début de la fonction).
Vous devez également définir drapeau sale de la page de propriétés pour indiquer que le bouton appliquer doit être activé. Cela se produit lorsque l'utilisateur modifie la valeur dans la zone d'édition de côtés. Un clic droit sur la classe de page de propriétés (CPolyProp) dans ClassView , puis sélectionnez Ajouter Windows Message Handler... de la menu.nbsp de raccourci ; Sélectionnez IDC_SIDES dans la zone objet et ajouter ensuite le message E&N_CHANGE.
Maintenant, ajoutez le code suivant dans Polyprop.h de la OnChangeSides fonction (suppression de tout code que l'Assistant mis là):
LRESULT OnCh&angeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
SetDirty(TRUE) ;
return 0 ;
}
OnChangeSidessera appelée lorsqu'un message WM_COMMAND est envoyé avec la notification EN_CHANGE pour le IDC_SIDES control. OnChangeSides appelle ensuite SetDirty et passe à TRUE pour indiquer la page de propriétés est maintenant sale et le bouton appliquer doit être activé.
Maintenant, ajoutez la page de propriétés à votre contrôle. L'Assistant objet ATL ne fait cela pour vous automatiquement, car il pourrait y avoir plusieurs contrôles dans votre projet. Ouvrez PolyCtl.h et ajoutez cette ligne à la carte de propriété:
PROP_ENTRY (« côtés », 1, CLSID_PolyProp)
Carte de propriété du contrôle maintenant ressemble à ceci:
BEGIN_PROP_MAP(CPolyCtl)
PROP_DATA_ENTRY (« _cx », m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY (« _cy », m_sizeExtent.cy, VT_UI4)
PROP_ENTRY (« FillColor », DISPID_FILLCOLOR, CLSID_StockColorPage)
PROP_ENTRY (« côtés », 1, CLSID_PolyProp)
/ / Entrées exemple
/ / PROP_ENTRY (« propriété Description », dispid, clsid)
/ / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
Vous aurait pu ajouter un PROP_PAGE macro avec le CLSID de votre page de propriétés, mais si vous utilisez le PROP_ENTRY macro comme indiqué, les côtés de la valeur de propriété est également enregistrée lorsque le contrôle est enregistré. Les trois paramètres à la macro sont la description de la propriété, le DISPID de la propriété et le CLSID de la page de propriété qui a la propriété sur elle. Cela est utile si, par exemple, vous chargez le contrôle dans Visual Basic et définissez le nombre de côtés au moment du design. Étant donné que le nombre de côtés est enregistré lorsque vous rechargez votre projet Visual Basic, que le nombre de côtés sera restauré.
Maintenant construire ce contrôle et insérez-le dans ActiveX Control Test Container. Puis, dans le Conteneur de Test, dans le menu Edition cliquez Objet de classe PolyCtl. La page de propriétés s'affiche ; a choisi l'onglet polygone.

Le bouton appliquer est initialement désactivé. Zone de texte démarrer en tapant une valeur dans les côtés et le bouton appliquer sera devenu activé. Après que vous avez terminé d'entrer la valeur, cliquez sur le bouton appliquer . Les changements d'affichage de contrôle et le bouton appliquer est à nouveau désactivée. Essayez d'entrer une valeur non valide et vous devriez voir une boîte de message contenant la description de l'erreur que vous avez défini de la put_Sides fonction.
Ensuite, vous allez mettre votre contrôle sur une page Web.
Retour à l'étape 5 |nbsp ; Passer à l'étape 7