Partager via


Dériver des contrôles d'un contrôle standard

Comme avec n’importe quelle classe dérivée de CWnd, vous pouvez modifier le comportement d’un contrôle en dérivant une nouvelle classe à partir d’une classe de contrôle existante.

Pour créer une classe de contrôle dérivée

  1. Dérivez votre classe d’une classe de contrôle existante et remplacez éventuellement la Create fonction membre afin qu’elle fournisse les arguments nécessaires à la fonction de classe Create de base.

  2. Fournissez des fonctions membres du gestionnaire de messages et des entrées de mappage de messages pour modifier le comportement du contrôle en réponse à des messages Windows spécifiques. Consultez Mappage des messages aux fonctions.

  3. Fournissez de nouvelles fonctions membres pour étendre les fonctionnalités du contrôle (facultatif).

L’utilisation d’un contrôle dérivé dans une boîte de dialogue nécessite un travail supplémentaire. Les types et les positions des contrôles dans une boîte de dialogue sont normalement spécifiés dans une ressource de modèle de dialogue. Si vous créez une classe de contrôle dérivée, vous ne pouvez pas la spécifier dans un modèle de boîte de dialogue, car le compilateur de ressources ne connaît rien de votre classe dérivée.

Pour placer votre contrôle dérivé dans une boîte de dialogue

  1. Incorporez un objet de la classe de contrôle dérivée dans la déclaration de votre classe de dialogue dérivée.

  2. Remplacez la OnInitDialog fonction membre dans votre classe de dialogue pour appeler la SubclassDlgItem fonction membre pour le contrôle dérivé.

SubclassDlgItem « sous-classes dynamiques » un contrôle créé à partir d’un modèle de dialogue. Lorsqu’un contrôle est sous-classé dynamiquement, vous vous connectez à Windows, traitez certains messages au sein de votre propre application, puis transmettez les messages restants à Windows. Pour plus d’informations, consultez la fonction membre SubclassDlgItem de classe CWnd dans la référence MFC. L’exemple suivant montre comment écrire un remplacement d’appel OnInitDialog SubclassDlgItem:

BOOL CSubDialog::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

Étant donné que le contrôle dérivé est incorporé dans la classe de dialogue, il est construit lorsque la boîte de dialogue est construite et qu’elle est détruite lorsque la boîte de dialogue est détruite. Comparez ce code à l’exemple dans Ajout de contrôles par main.

Voir aussi

Création et utilisation de contrôles
Contrôles