Поделиться через


CWnd::SubclassWindow

Вызовите этот подкласс функции-члена динамически" окна "и вложение его этому объекту CWnd.

BOOL SubclassWindow(
   HWND hWnd 
);

Параметры

  • hWnd
    Дескриптор окна.

Возвращаемое значение

Ненулевой если функция успешно; в противном случае – значение 0.

Заметки

Если окно будет динамически subclassed сообщения windows направят через сопоставление сообщения CWnd и вызывает обработчики сообщений в классе CWnd первым.Сообщения, передаваемые базового класса передаются в обработчик сообщений по умолчанию в окне.

Эта функция-член к объекту вложение элемента управления Windows CWnd и заменяет WndProc окна и функции AfxWndProc.Функция сохраняет указатель к старому WndProc в объекте CWnd.

ПримечаниеПримечание

Окно уже должна быть вложен в объект MFC, когда эта функция называется.

Пример

// 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();
}

Требования

Header: afxwin.h

См. также

Ссылки

Класс CWnd

Диаграмма иерархии

CWnd::DefWindowProc

CWnd::SubclassDlgItem

CWnd::Attach

CWnd::PreSubclassWindow

CWnd::UnsubclassWindow