Partager via


CWnd::SubclassWindow

Appelez cette sous-classe de fonction membre « dynamiquement » une fenêtre et joignez- à cet objet d' CWnd .

BOOL SubclassWindow(
   HWND hWnd 
);

Paramètres

  • hWnd
    Un handle dans la fenêtre.

Valeur de retour

Une valeur différente de zéro si la fonction est réussie ; sinon 0.

Notes

Lorsqu'une fenêtre est sous-classée dynamiquement, les messages windows conduiront dans la table des messages d'CWnd et appellent des gestionnaires de messages dans la classe d'CWnd en premier.Les messages passés à la classe de base sont passés au gestionnaire de messages dans la fenêtre.

Cette fonction membre joint le contrôle Windows à un objet d' CWnd et remplace WndProc de la fenêtre et AfxWndProc s'exécute.La fonction stocke un pointeur vers WndProc ancien dans l'objet d' CWnd .

[!REMARQUE]

La fenêtre n'est pas déjà être attachée à un objet MFC lorsque cette fonction est appelée.

Exemple

// The following code shows how to subclass the edit control and list box
// controls inside a combo box. It uses WM_CTLCOLOR for subclassing.
// CSuperComboBox represents the combo box
HBRUSH CSuperComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   if (nCtlColor == CTLCOLOR_EDIT)
   {
      //Edit control
      if (m_edit.GetSafeHwnd() == NULL)
         m_edit.SubclassWindow(pWnd->GetSafeHwnd());
   }
   else if (nCtlColor == CTLCOLOR_LISTBOX)
   {
      //ListBox control
      if (m_listbox.GetSafeHwnd() == NULL)
         m_listbox.SubclassWindow(pWnd->GetSafeHwnd());
   }

   HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
   return hbr;
}

void CSuperComboBox::OnDestroy()
{
   //unsubclass edit and list box before destruction
   if (m_edit.GetSafeHwnd() != NULL)
      m_edit.UnsubclassWindow();
   if (m_listbox.GetSafeHwnd() != NULL)
      m_listbox.UnsubclassWindow();
   CComboBox::OnDestroy();
}

Configuration requise

Header: afxwin.h

Voir aussi

Référence

CWnd, classe

Graphique de la hiérarchie

CWnd::DefWindowProc

CWnd::SubclassDlgItem

CWnd::Attach

CWnd::PreSubclassWindow

CWnd::UnsubclassWindow